模板类中的 typedef 与 Doxygen (C++)

typedef in template class with Doxygen (C++)

本文关键字:Doxygen C++ typedef      更新时间:2023-10-16

我的问题与如何使用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 类坐标,它不会与 Base 显示在同一页面中。事实上,所有 typedef 类型都与此命名空间中的所有类一起列在基本命名空间页中。我想知道是否可以在基本 HTML 页面中显示坐标类。这样,基础和坐标之间的联系将变得更加紧密。谢谢!

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创建布局文件,然后在生成的DoxygenLayout.xml中编辑related元素的两个匹配项,从而将此标题更改为相关成员,如下所示:

<related title="Related Members"/>

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

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

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

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

您也可以使用 /sa 命令手动将引用放置在 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
}

其他答案将起作用,但是如果您的typedefBase类密切相关,以至于您希望它们出现在同一个 Doxygen 页面中,您可能需要考虑定义一个新的namespace(在 Fundamental 内),该将只包括Base和您的typedef. 然后,doxygen将为该namespace生成一个页面,其中包括Base和您的typedef.

定义file文档将执行相同的操作,但对于您的代码来说,这可能是更合乎逻辑的布局。

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