使用 Doxygen 记录 C++ 静态模板函数

Mic*_*ler 5 c++ templates doxygen

您好,我在使用 Doxygen 记录 C++ 类静态模板函数时遇到问题:

克拉兹.h:

#ifndef CLAZZ_H
#define CLAZZ_H

/*! \file clazz.h
 *  \brief Clazz declaration
 *  \author Me and myself
 *  \sa Clazz
 */

/*! \class Clazz
 *  \brief About class
 */
class Clazz
{

public:

  /*! \fn TYPE func(TYPE value)
   *  \brief About static func
   *  \param value Parameter
   *  \returns Some value of \c TYPE
   *  \tparam TYPE Class type.
   */
  template<typedef TYPE>
  static TYPE func(TYPE value);
};

#endif
Run Code Online (Sandbox Code Playgroud)

克拉兹.cpp:

#include "clazz.h"

/*! \file clazz.cpp
 *  \brief Clazz implementation
 *  \author Me and myself
 *  \sa Clazz
 */

template<typedef TYPE> 
TYPE Clazz::func(TYPE value)
{
  return value;
}
Run Code Online (Sandbox Code Playgroud)

Doxygen 显示:

Generating docs for compound Clazz...
xxx/clazz.cpp:10: Warning: Member func(TYPE value) (function) of class Clazz is not documented.
Run Code Online (Sandbox Code Playgroud)

当我查看 HTML 输出时,我可以看到该函数两次:

Public Member Functions
template<typedef TYPE> TYPE (TYPE value)

Static Public Member Functions
template<typedef TYPE> static TYPE func (TYPE value)
About func. More...
Run Code Online (Sandbox Code Playgroud)

我不需要非静态文档。

有什么想法如何做到这一点吗?

谢谢。

the*_*ine 1

我遇到了类似的问题,一堆模板函数在文档中出现了两次,一次是静态的,一次不是。

我在一个文件中有函数定义.inl(有人更喜欢用于.hpp此目的),该文件包含在.h. 我添加EXTENSION_MAPPING inl=c++了没有效果。我还尝试将函数定义移至 ,以.h确保 Doxygen 在解析声明的同时看到它,但这也无济于事。这让我相信这是一个 Doxygen 错误 - 在解析成员模板定义时,它无法将其与出现关键字的适当声明关联起来,static并且笨拙地将函数复制为非静态函数。嗯,解析 C++ 并不是一件容易的事。

我最终将.inl文件添加到忽略列表,因为无论如何它都没有文档注释(除了其@file本身的文档)。现在它没有出现在文件列表中,但这似乎比文档中出现虚假成员函数的危害要小。我想你可以将所有(或至少是有问题的)函数放入.inl一个#ifndef DOXYGEN块中并获得完美的结果。