9

我的问题与如何使用 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 页面中显示坐标类。这样一来,Base 和 Coordinate 之间的联系就会更加紧密。谢谢!

4

6 回答 6

5

typedef 是命名空间的一部分,因此您必须记录命名空间以使其出现,即​​:

/// 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"/>
于 2012-08-07T20:49:39.777 回答
3

在手册中,我阅读了以下内容:

让我们重复一遍,因为它经常被忽略:要记录全局对象(函数、typedef、枚举、宏等),您必须记录定义它们的文件。换句话说,至少必须有一个

/*! \file *//** @file */此文件中的一行。

于 2012-08-07T15:43:01.327 回答
2

有 See Also ( @sa ) 命令,可用于生成对其他实体的交叉引用。

于 2012-08-07T15:46:51.123 回答
1

您也可以使用该/sa命令Base在's 页面中手动放置参考。

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
}
于 2012-08-07T15:47:30.620 回答
0

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

于 2012-08-08T13:22:25.980 回答
0

其他答案将起作用,但如果您与您希望它们出现在同一个 Doxygen 页面中typedef的类紧密相关Base,您可能需要考虑定义一个新的namespace(在 内Fundamental),它将只包含Base并且您的typedef.Then, doxygen 将生成一个页面,namespace其中将包括Base您的typedef.

定义file文档也会做同样的事情,但这可能是您的代码更合乎逻辑的布局。

于 2012-08-07T15:50:59.537 回答