2014-02-20 28 views
3

喜靜模板函數我有記錄的C++類的靜態模板函數與Doxygen的一個問題:歸檔C++與Doxygen的

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

我不希望非靜態文檔。

任何想法如何做到這一點?

謝謝。

+2

我不知道Doxygen,但你幾乎可以肯定要在頭文件中定義模板。請參閱http://stackoverflow.com/questions/495021。 –

+0

@MikeSeymour我可以想象,這也可能解決doxygen在這裏的困惑。 –

回答

0

我也有類似的問題,一堆的文檔中出現了兩次,一次是靜態的,一旦沒有模板功能。

我有一個.inl文件(有人更喜歡使用.hpp)的函數定義,它包含在.h中。我加了EXTENSION_MAPPING inl=c++無濟於事。我也嘗試將函數定義移動到.h以確保Doxygen在解析聲明的同時看到它,但這也沒有幫助。這導致我相信這是一個Doxygen錯誤 - 在解析成員模板定義時,它無法將其與static關鍵字出現的適當聲明相關聯,並且笨拙地將函數複製爲非靜態。那麼,解析C++並非易事。

我最終添加了.inl文件來忽略列表,因爲它裏面沒有任何文檔註釋(@file本身的文檔除外)。現在它不會出現在文件列表中,但看起來像是一個更小的邪惡,而不是僞造的成員函數出現在文檔中。我想你可以把.inl中的所有功能(或者至少有問題的功能)放到#ifndef DOXYGEN區塊中,並獲得完美結果。