这肯定是一个菜鸟问题,但我在Doxygen文档中找不到答案。我不确定是否使用:
@file
或
@class
记录我的头文件时。
原因是如果我放置文件,那么所有注释只出现在“文件”选项卡中,而不是出现在“类”选项卡中(每个)。
对于cpp来说没关系,我只是使用文件并且它很好,但是如果我在头文件中使用文件和类(文件在开头和类在类声明开始之前),那么我得到重复的条目生成的文档中的类......
我做错了什么?有什么建议?想法?
此致 亚历
编辑:我现在遇到了一个新问题。为了避免循环依赖,我在头文件中声明了我的类两次(可能这不是避免循环依赖的最佳方法,但它通常适用于我),例如:
#ifndef EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DECL
#define EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DECL
namespace eu_sofia_kpi_common
{
class KPI_CPP_API AbstractThread;
}
#define EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DECL_END
#endif EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DECL
#ifdef EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DECL_END
#ifndef EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DEF
#define EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DEF
namespace eu_sofia_kpi_common
{
class KPI_CPP_API AbstractThread
{
public:
AbstractThread();
virtual ~AbstractThread();
///start method, derived classes must implement this method to initialize their boost::shared_ptr<boost::thread> pointer member object
virtual int start() = 0;
//stop method
virtual void stop() = 0;
protected:
///Pointer to a boost thread to be inherited and that children classes must use in the implementation of the start and stop methods
boost::shared_ptr<boost::thread> m_thread;
};
}
#endif EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DEF
#endif EU_SOFIA_KPI_COMMON_ABSTRACTTHREAD_DECL_END
如您所见,我在“真实”声明之前有一份前瞻性声明。现在,如果我使用@class,Doxygen会抱怨与此类相关的不一致问题,尽管它会生成该类的文档。我的猜测是#ifdef或#ifndef Doxygen所包围的任何东西似乎都不太喜欢......
答案 0 :(得分:1)
我通常不使用,除非我想指定备用包含路径或类似的东西。通常它看起来像这样:
/// Tunables loader.
/** This class contains a set of functions for loading tunables from
* file. Usually you only need one QuaTunablesLoader object in your
* program. Once its work is done, you can safely destroy it.
*
* ... blah, blah, blah ...
* */
class QuaTunablesLoader {
这实际上相当于使用@class,所以你的问题的答案是肯定的,你应该在记录类时使用@class。如果您的头文件不包含任何其他内容,您可能根本不应该记录它,因为文档只会说“此文件包含SomeClass类的声明”。如果文件包含更多内容,例如友元函数,则应该记录文件(显然,使用@file),可能提供对类的引用。