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

时间:2014-02-20 17:32:05

标签: c++ templates doxygen

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

Clazz.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

Clazz.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;
}

Doxygen显示:

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

当我查看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...

我不想要那些非静态文档。

任何想法如何做到这一点?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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