2012-10-24 118 views
3

我注意到,當構造函數接受參數時,doxygen可以鏈接來自實例的成員函數調用,當默認構造函數不接受任何參數但未能鏈接它們時。代碼塊中的doxygen鏈接丟失

  • 這是爲什麼?
  • 是否有解決方法在@code/@endcode區塊中手動添加鏈接?

在下面的例子:

  • t.foo() - foo()鏈接
  • u.foo() - foo()未鏈接

/** @file doxy.cpp */ 

/** struct T */ 
struct T { 
    /** foo */ 
    void foo() { } 
}; 

/** struct U */ 
struct U { 
    int a; /**< int a */ 

    /** U */ 
    U(int a_) : a(a_) { } 

    /** foo */ 
    void foo() { } 
}; 

/** 
* main 
* 
* @code 
* T t; 
* t.foo(); // foo is linked 
* 
* U u(42); 
* u.foo(); // foo is not linked 
* 
* @endcode 
*/ 
int main() 
{ 
    return 0; 
} 

回答

1

我認爲這是Doxygen中已知問題的一個症狀。來自http://www.stack.nl/~dimitri/doxygen/trouble.html

在某些情況下,冗餘花括號可能會混淆doxygen。例如:

void f (int); 

被正確解析爲函數聲明,但

const int (a); 

也被視爲與名稱int, 函數聲明,因爲只有語法分析,而不是語義。如果 冗餘括號可以在

int *(a[20]); 

被檢測到,如隨後的doxygen將刪除括號和正確地分析結果。

因此,在這種情況下,我相信:

U u(42); 

被解釋爲一個函數,而不是作爲一個變量聲明。

不幸的是,我沒有意識到在代碼塊中明確添加鏈接的任何選項。我找到的唯一解決方法是重構代碼,以使該聲明看起來不像Doxygen的函數。例如,改變你的變量初始化到這一點:

U u = U(42); 

允許Doxygen的認識u爲變量,而不是功能。