2012-08-07 93 views
8

我的问题是关于如何评论与Doxygen模板类中的typedef。我举一个例子来说明我的问题:typedef模板类与Doxygen(C++)

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类坐标系,它不会出现在与Base相同的页面中。实际上,所有的typedef类型都在基本命名空间页面中列出,以及此命名空间中的所有类。我想知道是否可以在Base HTML页面中显示Coordinate类。通过这样做,Base和Coordinate之间的链接将变得更加接近。谢谢!

回答

5

的类型定义是一个命名空间的一部分,所以你必须记录下命名空间才会出现,即:

/// documentation for the namespace 
namespace fundamental 
{ 
    ... 
    typedef Base<float> Coordinate; ///< Point coordinate class 
} 

另外,您可以使用@relates但这种状况会成员下相关功能

/// @relates Base 
/// Point coordinate class 
typedef Base<float> Coordinate; 

可以将此标题更改为实例相关成员:基类的通过使用doxygen -l创建布局文件,然后编辑related元件的两个出现在所生成的DoxygenLayout.xml如下:

<related title="Related Members"/> 
3

In the manual我阅读以下内容:

让我们重复一下,因为它常常被忽略:记录全局对象(函数,类型定义,枚举,宏等等),你必须证明它们所定义的文件。换句话说,在这个文件中必须至少有一行

/*! \file *//** @file */行。

+0

我试过了,但它似乎不起作用。 – feelfree 2012-08-07 16:02:20

2

还有另请参阅(@sa)命令,可用于生成对其他实体的交叉引用。

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 
} 
0

其他的答案会的工作,但如果你的typedef是如此紧密地联系在一起,你想让他们出现在同一Doxygen的页面Base类,你可能要考虑定义一个新namespace(内Fundamental)这将只是包括Base和你typedef.然后,doxygen的会生成该namespace一个页面,其中将包括Base和你typedef.

定义file文档会做同样的事情,但是这可能是一个更日志您的代码的合理布局。

0

有此问题其他两种解决方案。您可以使用@defgroup关键字定义组,并将类和typedef类型分组到一个模块中。另一种解决方案是使用@relates