c++ - 通过 Doxygen 中的宏定义的文档函数

标签 c++ documentation doxygen

我有一个实际上并不存在但通过宏定义的类:

#define DEFCLASS(name,datatype) Class name { \
    public: \
        void clear(); \
        datatype obj; \
    };
DEFMETHOD(StringContainer, const char*)

...

StringContainer foo("hi!");

当然它应该使用模板实现,但我没有写它,我无法更改它并且大型代码库依赖于它。

现在的问题是,我想在 doxygen 中记录 StringContainer。但是,它不是真正存在的类,所以如果我这样做:

/*!
    \class StringContainer
    \brief A string container

    \fn void StringContainer::clear()
    \brief Clears the container
*/

我收到 doxygen 警告:

warning: documented function `StringContainer::clear' was not declared or defined.

并且文档不包含该功能。我知道这有点棘手,但是有什么方法可以强制 doxygen 拥有“信念”并为 StringContainer 创建文档,即使它没有在源代码中定义也是如此?

解决方案

可以创建伪造的 .h 文件来让 doxygen 相信某个类存在,同时阻止构建系统包含它。这些文件可以有 .dox 扩展名。这样,我将创建一个包含类定义和文档的 .dox 文件:

class StringContainer {
public:
    /*! Removes the contents of the container. */
    void clear();
    const char *obj;
};

这个文件实际上不会包含在构建系统中,它的唯一目的是记录 StringContainer。

最佳答案

我必须为现有的代码库做很多这样的工作,我发现使用“EXPAND_AS_DEFINED”配置选项可以解决这个问题。 在您的 Doxygen 配置文件中,设置以下内容:

EXPAND_AS_DEFINED = DEFCLASS

只要包含“DEFCLASS”定义的文件是您的 Doxygen 的输入,它就可以工作。 (即这不适用于“STDMETHOD”之类的东西,因为您可能不包含将“STDMETHOD”定义为 Doxygen 输入的文件)

我在 VS 2010 中进行了如下尝试,并且能够在没有警告的情况下编译和运行 Doxygen。

例子如下:

基础.h文件:

#pragma once

#define DEFCLASS(name,datatype) class name { \
    public: \
        name(){} \
        void clear(){}; \
        datatype obj; \
    };

DEFCLASS(StringContainer, const char*)


/*!
    \class StringContainer
    \brief A string container

    \fn void StringContainer::clear()
    \brief Clears the container
*/

基础.cpp文件:

#include "Base.h"

int main()
{
    StringContainer foo;
    foo.clear();


    return 0;
}

DoxygenTest.doxygen

MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = YES
EXPAND_AS_DEFINED      = DEFCLASS

关于c++ - 通过 Doxygen 中的宏定义的文档函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10550057/

相关文章:

c++ - 具有模板模板参数的模板类特化

c# - 如何本地化 .NET 库的文档

c++ - 变量后的 Doxygen 多行注释

layout - 是否有示例布局可以使 doxygen 文档更具吸引力?

php - 为 phpdoc 声明大量变量而不用/**开头

java - 在 doxygen 中使用 @see 或 @link

c++ - XMMATRIX 和带有 __declspec(align ('16' )) 的形式参数不会对齐

c++ - 如何使用 vtk 实时可视化在另一个线程中运行的计算

c++ - 在 C++ 的 UI 线程中需要帮助

documentation - 如何控制Doxygen文档部分的顺序?