使用Doxygen(C ++)的模板类中的typedef

时间:2012-08-07 15:31:03

标签: c++ doxygen

我的问题与如何使用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之间的链接将变得更加紧密。谢谢!

6 个答案:

答案 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 commandBase的页面中手动放置引用。

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