Документировать значения класса enum с помощью Doxygen без включения EXTRACT_ALL

Я не смог показать документацию для значений классов enum без установки EXTRACT_ALL. Комментарии для сохранения, усечения и добавления отсутствуют. Само перечисление документировано. Если я включу EXTRACT_ALL, я получу список.

Мой код:

namespace grimoire
{

...

/// @brief Behaviour of function open_for_write for already existing files.
/// @see open_for_write()
enum class OpenMode
{
    preserve = std::ofstream::out,   /// Already existing file aren't opened.
    truncate = std::ofstream::trunc, /// Discard existing contents.
    append   = std::ofstream::app    /// Append to existing contents.
};

...

}

Я использую CMake для запуска Doxygen с помощью:

#set(DOXYGEN_EXTRACT_ALL YES)
doxygen_add_docs(
    docs
    "${CMAKE_CURRENT_SOURCE_DIR}/include/grimoire"
    "${CMAKE_CURRENT_SOURCE_DIR}/src")

Редактировать:

Он не работает даже с классическим перечислением и без явных значений. Похоже, это связано с моими настройками.

Решено:

Мне пришлось добавить комментарий к окружающему пространству имен. Doxygen извлек само перечисление и другие вещи, такие как функции и классы, внутри этого пространства имен, но не записи перечисления.


person Martin Fehrs    schedule 31.05.2020    source источник
comment
Doxygen не полностью понимает C++. Иногда он ошибается.   -  person Jesper Juhl    schedule 31.05.2020


Ответы (1)


Doxygen не всегда подхватывает перечисление, это можно решить с помощью команды \file. Кроме того, вы документируете значения перечисления после его определения, это означает, что вы должны использовать не ///, а ///<

Таким образом, ограниченный пример будет выглядеть так:

/// \file


/// @brief Behavior of function open_for_write for already existing files.
/// @see open_for_write()
enum class OpenMode
{
    preserve = std::ofstream::out,   ///< Already existing file aren't opened.
    truncate = std::ofstream::trunc, ///< Discard existing contents.
    append   = std::ofstream::app    ///< Append to existing contents.
};

Изменить: судя по ответу OP, данное решение не было полным, поскольку исходная проблема была встроена в пространство имен. Чтобы иметь возможность показать перечисление в этом случае, недостаточно добавить \file, но также необходимо документировать пространство имен. Итак, более полный пример:

/// \file

/// The namespace documentation
namespace NS
{
  /// @brief Behavior of function open_for_write for already existing files.
  /// @see open_for_write()
  enum class OpenMode
  {
      preserve = std::ofstream::out,   ///< Already existing file aren't opened.
      truncate = std::ofstream::trunc, ///< Discard existing contents.
      append   = std::ofstream::app    ///< Append to existing contents.
  };
};
person albert    schedule 31.05.2020
comment
Все еще не повезло с @file и ///‹ - person Martin Fehrs; 31.05.2020