2012-06-01 27 views
2

我有一個包含頭文件:爲什麼Doxygen將此方法報告爲屬性?

class ClassName { 
... 

//////////////////////////////////////////////////////////////////////////////////////////////////// 
/// \fn boost::function<int(void *, char *)> ClassName::getFnPtr(); 
/// 
/// \brief ... 
/// 
/// \author ... 
/// \date ... 
/// 
/// \return A boost function object ... 
//////////////////////////////////////////////////////////////////////////////////////////////////// 

boost::function<int(void *, char *)> getFnPtr(); 

... 
}; 

當運行Doxygen的,getFnPtr()的「公共屬性」,而不是在報道的「公有成員。」任何人都可以幫助我讓Doxygen把它放在正確的地方嗎?

我是Doxygen的新手,但熟悉Javadoc。我正在使用Doxygen GUI 1.8.1。

編輯:我認爲Doxygen是窒息的模板返回類型涉及一個助推函數對象。這篇文章 - Doxygen fails to parse templated return type - 表示Doxygen不處理最新的C++更改。什麼版本的C++開始支持boost函數對象返回類型?任何人都可以指向Doxygen用於boost函數對象返回類型的其他示例嗎?

+0

可能是因爲Doxygen沒有C++語言精確分析器(JavaDoc)。這意味着Doxygen必須在解釋符號的含義和/或在何處定義它的位置時犯錯誤。 (在哪裏搞砸取決於它沒有實現的C++部分)。儘管存在這個缺陷,但人們一直都在困惑我,人們使用Doxygen。 –

+0

@IraBaxter是否在我發佈的代碼中存在固有的東西,這會觸發Doxygen中的已知錯誤?或者你只是說「Doxygen有錯誤,所以不要使用它?」我有其他非常相似的方法聲明,工作得很好。無論如何,我必須使用Doxygen,那麼你能找出問題並幫助解決它嗎?順便說一句,你表示Javadoc有一個C++語言精確解析器。你的意思是Javadoc有一個精確的語言_Java_解析器? – taz

+0

我的意思是說JavaDoc具有(類推)一種語言精確的Java解析器,是正確的。不,我不知道Doxygen的類型解析器的侷限性,除了真正的(我們爲C++前端創建一個解析器)是巨大的努力,我沒有理由相信已經爲Doxygen做出了努力。我在說,「Doxygen肯定有錯誤」,所以我想知道爲什麼人們使用它。一個答案是他們不寫複雜的C++程序,所以Doxygen做的是「足夠正確」。如果Doxygen在你遇到的複雜情況下失敗,那麼它就無法確切地說明它最需要的地方。因此,我的困惑。 –

回答

2

嘗試使用typedef。沿着這些線:

typedef boost::function<int(void *, char *)> myfunc_t; 
myfunc_t getFnPtr(); 
+0

我會檢查這是否有效,但我不想更改本來不會改變的代碼,只是爲了讓Doxygen正常工作。 – taz

+0

恐怕這裏沒有那麼多的選擇。 –

+0

您的typedef建議確實會導致函數被正確放置。現在我堅持一個純粹的解決方案。 – taz

1

問題是,doxygen有一些簡單的啓發式來區分函數和函數指針類型的變量。返回類型的模板參數是在這種情況下引發錯誤決定的原因。

我將在下一個版本(> 1.8.1)中更正此問題,同時您可以使用n.m.建議的typedef解決方法。相關的錯誤報告是https://bugzilla.gnome.org/show_bug.cgi?id=677315

相關問題