我的问题与如何使用Doxygen在模板类中注释typedef有关。我将举例说明我的问题:
namespace fundamental
{
/**
* Basic function
*/
template <typename T>
class Base
{
public:
T x; ///< x coordinate
T y; ///< y coordinate
};
typedef Base<float> Coordinate; ///< Point coordinate class
}
使用Doxygen处理上述代码后,我可以获得一个HTML页面来显示Base类的定义。但是,对于typedef类Coordinate,它不会出现在Base的同一页面中。实际上,所有typedef类型都列在基本命名空间页面中,以及此命名空间中的所有类。我想知道是否可以在Base HTML页面中显示Coordinate类。通过这样做,Base和Coordinate之间的链接将变得更加紧密。谢谢!
答案 0 :(得分:5)
typedef是命名空间的一部分,因此您必须记录命名空间才能显示它,即:
/// documentation for the namespace
namespace fundamental
{
...
typedef Base<float> Coordinate; ///< Point coordinate class
}
或者您可以使用@relates
,但这会将成员置于Base类的 Related Functions 之下:
/// @relates Base
/// Point coordinate class
typedef Base<float> Coordinate;
您可以使用doxygen -l
创建布局文件,然后在生成的{{{}}中编辑related
元素的两次出现,将此标题更改为相关成员。 1}}如下:
DoxygenLayout.xml
答案 1 :(得分:3)
In the manual我读了以下内容:
让我们重复一遍,因为它经常被忽视:要记录全局对象(函数,typedef,枚举,宏等),您必须记录定义它们的文件。换句话说,至少必须有一个
/*! \file */
或者
此文件中的/** @file */
行。
答案 2 :(得分:2)
还有See Also(@sa)命令,用于生成对其他实体的交叉引用。
答案 3 :(得分:1)
您还可以使用/sa
command在Base
的页面中手动放置引用。
namespace fundamental
{
/**
* Basic function
* /sa Coordinate
*/
template <typename T>
class Base
{
public:
T x; ///< x coordinate
T y; ///< y coordinate
};
typedef Base<float> Coordinate; ///< Point coordinate class
}
答案 4 :(得分:0)
其他答案可行,但如果您的typedef
与您希望它们出现在同一Doxygen页面中的Base
类密切相关,您可能需要考虑定义一个新的{ {1}}(仅在namespace
内)Fundamental
以及Base
然后,doxygen会为typedef.
生成包含namespace
的页面和你的Base
定义typedef.
文档会做同样的事情,但这可能是代码更合理的布局。
答案 5 :(得分:0)
此问题还有另外两种解决方案。您可以使用@defgroup关键字定义组,并将类和typedef类型分组到一个模块中。另一种解决方案是使用@relates