自动链接生成

大多数文档系统都有特殊的“另请参阅”部分,可以在其中插入指向其他文档的链接。虽然 Doxygen 也有一个命令来启动这样一个部分(请参见\sa部分),但它允许您将此类链接放置在文档中的任何位置。对于 {\LaTeX} 文档,会写入页码引用而不是链接。此外,文档末尾的索引可用于快速查找成员、类、命名空间或文件的文档。对于手册页,不生成引用信息。

接下来的部分将展示如何生成指向源文件中各种文档化实体的链接。

指向网页和邮件地址的链接

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 文档。

转到下一节或返回到索引