6

実際には存在しないが、マクロを介して定義されているクラスがあります。

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

..。

StringContainer foo("hi!");

もちろん、テンプレートを使用して実装する必要がありましたが、私はそれを作成しませんでした。変更することはできず、大規模なコードベースはそれに依存しています。

ここで問題は、StringContainerをdoxygenで文書化したいと思います。ただし、実際に存在するクラスではないため、次のようにします。

/*!
    \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を文書化することです。

4

3 に答える 3

4

既存のコード ベースに対してこれを何度も行う必要がありましたが、"EXPAND_AS_DEFINED" 構成オプションを使用すると、これが解決されることがわかりました。Doxygen 構成ファイルで、次のように設定します。

EXPAND_AS_DEFINED = DEFCLASS

これは、「DEFCLASS」の定義を含むファイルが Doxygen への入力である限り機能します。(つまり、「STDMETHOD」を Doxygen 入力として定義するファイルを含めない可能性が高いため、これは「STDMETHOD」のようなものでは機能しません)

次のように VS 2010 でこれを試してみたところ、警告なしで Doxygen をコンパイルして実行することができました。

次に例を示します。

Base.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
*/

Base.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
于 2012-08-02T12:50:48.190 に答える
1

doxygen構成(http://www.star.bnl.gov/public/comp/sofi/doxygen/config.htm)でMACRO_EXPANSIONを「yes」に設定すると、ldoxygenはStringContainerを「参照」します。

于 2012-05-11T11:49:12.523 に答える
0

doxygenマニュアルのこのセクションを読むことをお勧めします:http://www.doxygen.org/preprocessing.html。DECLARE_INTERFACEマクロとSTDMETHODマクロの処理方法が説明されている部分は、必要なものと非常によく似ています。

したがって、ダミークラスを別のファイルに書き込みたくない場合は、これが代替ソリューションになる可能性があります。

于 2012-05-12T08:03:54.003 に答える