自動連結產生

大多數文件系統都有特殊的「另請參閱」章節,可以在其中插入其他文件片段的連結。雖然 Doxygen 也有一個命令來開始這樣一個章節(請參閱 \sa 章節),但它允許您將這類連結放置在文件的任何位置。對於 {\LaTeX} 文件,會寫入頁碼的參考而不是連結。此外,可以使用文件末尾的索引來快速找到成員、類別、命名空間或檔案的文件。對於 man page,則不會產生參考資訊。

接下來的章節將說明如何在原始碼檔案中產生指向各種已記錄實體的連結。

網頁和郵件地址的連結

Doxygen 會自動將文件中找到的任何 URL 和郵件地址替換為連結(在 HTML 中)。若要手動指定連結文字,請使用 HTML 'a' 標籤

<a href="linkURL">link text</a> 

Doxygen 會自動將其轉換為其他輸出格式。

類別的連結

文件中所有對應到已記錄的類別且包含至少一個非小寫字元的單字,都會自動被替換為指向包含該類別文件的頁面的連結。如果您想要防止與已記錄的類別對應的單字被替換為連結,您應該在該單字前面加上 %。若要連結到一個全部小寫的符號,請使用 \ref

檔案的連結

所有包含點 (.) 且該點不是單字中最後一個字元的單字,都會被視為檔案名稱。如果該單字確實是已記錄的輸入檔案的名稱,則會自動建立指向該檔案文件的連結。

函式的連結

如果遇到下列其中一種模式,就會建立函式的連結

  1. <函式名稱>"("<引數清單>")"
  2. <函式名稱>"()"
  3. "::"<函式名稱>
  4. (<類別名稱>"::")n<函式名稱>"("<引數清單>")"
  5. (<類別名稱>"::")n<函式名稱>"("<引數清單>")"<修飾符>
  6. (<類別名稱>"::")n<函式名稱>"()"
  7. (<類別名稱>"::")n<函式名稱>

其中 n>0。

注意 1
函式引數應指定正確的類型,例如 'fun(const std::string&,bool)' 或 '()' 以符合任何原型。
注意 2
成員函式修飾符 (例如 'const' 和 'volatile') 是識別目標所必需的,例如 'func(int) const' 和 'func(int)' 指向不同的成員函式。
注意 3
為了與 Javadoc 相容,可以在上述模式中使用 # 代替 :: 。
注意 4
在包含成員 foo 的類別的文件中,使用 "::foo" 建立對全域變數的參考,而 #foo 將會連結到該成員。

對於非重載成員,可以省略引數清單。

如果函式已重載,且未指定相符的引數清單(即使用模式 2 或 6),則會建立指向其中一個重載成員文件的連結。

對於成員函式,可以省略類別範圍(如模式 4 到 7 中所用),如果

  1. 該模式指向的已記錄成員與包含該模式的文件區塊屬於同一個類別。
  2. 與包含該模式的文件區塊對應的類別,具有包含符合該模式之已記錄成員的基底類別。

其他成員的連結

所有這些實體都可以使用與上一節中描述的相同方式連結。為求清晰起見,建議在此情況下僅使用模式 3 和 7。

範例
/*! \file autolink.cpp
測試自動連結產生。
連結到 Autolink_Test 類別的成員:Autolink_Test::member,
更具體的連結到每個重載成員
Autolink_Test::member(int) 和 Autolink_Test#member(int,int)
連結到 Autolink_Test 的受保護成員變數:Autolink_Test#var,
連結到全域列舉類型 #GlobEnum。
連結到定義 #ABS(x)。
連結到 Autolink_Test 類別的解構子:Autolink_Test::~Autolink_Test,
連結到類型定義 ::B。
連結到列舉類型 Autolink_Test::EType
連結到一些列舉值 Autolink_Test::Val1 和 ::GVal2
*/
/*!
由於此文件區塊屬於 Autolink_Test 類別,因此不會產生指向
Autolink_Test 的連結。
連結到建構子的兩種方式為:#Autolink_Test 和 Autolink_Test()。
連結到解構子為:#~Autolink_Test 和 ~Autolink_Test()。
連結到此類別中的成員:member()。
更具體的連結到每個重載成員
member(int) 和 member(int,int)。
連結到變數 #var。
連結到全域類型定義 ::B。
連結到全域列舉類型 #GlobEnum。
連結到定義 ABS(x)。
連結到變數 \link #var 使用另一個文字\endlink 作為連結。
連結到列舉類型 #EType。
連結到一些列舉值:\link Autolink_Test::Val1 Val1 \endlink 和 ::GVal1。
最後但並非最不重要的,連結到一個檔案:autolink.cpp。
\sa 在「另請參閱」章節中,會檢查任何單字,因此 EType、
Val1、GVal1、~Autolink_Test 和 member 將在 HTML 中被替換為連結。
*/
class Autolink_Test
{
public::
Autolink_Test(); //!< 建構子
~Autolink_Test(); //!< 解構子
void member(int); /**< 成員函式。詳細資訊。 */
void member(int,int); /**< 重載的成員函式。詳細資訊 */
/** 列舉類型。更多詳細資訊 */
enum EType {
Val1, /**< 列舉值 1 */
Val2 /**< 列舉值 2 */
};
protected::
int var; /**< 成員變數 */
};
/*! 詳細資訊。 */
Autolink_Test::Autolink_Test() { }
/*! 詳細資訊。 */
Autolink_Test::~Autolink_Test() { }
/*! 全域變數。 */
int globVar;
/*! 全域列舉。 */
enum GlobEnum {
GVal1, /*!< 全域列舉值 1 */
GVal2 /*!< 全域列舉值 2 */
};
/*!
* 巨集定義。
*/
#define ABS(x) (((x)>0)?(x):-(x))
typedef Autolink_Test B;
/*! \fn typedef Autolink_Test B
* 類型定義。
*/
點擊此處查看 Doxygen 產生的對應 HTML 文件。

類型定義 (typedefs)

涉及類別、結構和聯集的類型定義,例如

typedef struct StructName TypeName

為 StructName 建立別名,因此當遇到 StructName 本身或 TypeName 時,將會產生指向 StructName 的連結。

範例
/*! \file restypedef.cpp
* 解析類型定義的範例。
*/
/*! \struct CoordStruct
* 座標對。
*/
struct CoordStruct
{
/*! x 座標 */
float x;
/*! y 座標 */
float y;
};
/*! 為 CoordStruct 建立類型名稱 */
typedef CoordStruct Coord;
/*!
* 此函式會傳回 \a c1 和 \a c2 的加總,即
* (c1.x+c2.x,c1.y+c2.y)
*/
Coord add(Coord c1,Coord c2)
{
}
點擊此處查看 Doxygen 產生的對應 HTML 文件。

前往下一節或返回索引