图表和示意图

Doxygen 内置支持为 C++ 类生成继承关系图。

Doxygen 可以使用 graphviz 中的 "dot" 工具来生成更高级的图表和图形。Graphviz 是一个开源的、跨平台的图形绘制工具包,可以在 https://www.graphviz.org/ 找到。

如果您的路径中有 "dot" 工具,您可以在配置文件中将 HAVE_DOT 设置为 YES,以让 Doxygen 使用它。

Doxygen 使用 "dot" 工具生成以下图形

  • 将绘制类的层次结构的图形表示,以及文本表示。目前,此功能仅支持 HTML。
    警告: 当您有一个非常大的类层次结构,其中许多类都派生自一个公共基类时,生成的图像可能会太大,以至于某些浏览器无法处理。
  • 将为每个已文档化的类生成一个继承图,显示直接和间接的继承关系。这将禁用内置类继承关系图的生成。
  • 将为每个包含至少一个其他文件的已文档化文件生成一个包含依赖关系图。此功能目前仅支持 HTML 和 RTF。
  • 还会生成一个反向包含依赖关系图,显示对于一个(头)文件,哪些其他文件包含它。
  • 为每个已文档化的类和结构绘制一个图,显示
    • 与基类的继承关系。
    • 与其他结构和类的使用关系(例如,如果类 A 有一个类型为类 B 的成员变量 m_a,则 A 有一个指向 B 的箭头,标签为 m_a)。
  • 如果将 CALL_GRAPH 设置为 YES,则为每个函数绘制一个图形化的调用图,显示该函数直接或间接调用的函数(另请参阅 \callgraph\hidecallgraph 部分)。
  • 如果将 CALLER_GRAPH 设置为 YES,则为每个函数绘制一个图形化的调用者图,显示该函数被直接或间接调用的函数(另请参阅 \callergraph\hidecallergraph 部分)。
  • 如果将 DIRECTORY_GRAPH 设置为 YES,Doxygen 将为每个目录生成显示目录依赖关系的图。该图将目录显示为框。子目录嵌套在其父目录的框中。图的深度通过 DIR_GRAPH_MAX_DEPTH 配置。目录之间的包含依赖关系显示为箭头。

使用 布局文件,您可以确定实际显示哪些图形。

选项 DOT_GRAPH_MAX_NODESMAX_DOT_GRAPH_DEPTH 可用于限制各种图形的大小。

HTML 和 RTF 中的类图中的元素具有以下含义

  • 一个黄色框表示一个类。一个框的右下角可以有一个小标记,表示该类包含隐藏的基类。对于类图,当前最大树宽度为 8 个元素。如果树更宽,一些节点将被隐藏。如果框填充了虚线图案,则继承关系是虚拟的。
  • 一个白色框表示当前正在显示该类的文档。
  • 一个灰色框表示一个未文档化的类。
  • 一个实线深蓝色箭头表示公共继承。
  • 一个虚线深绿色箭头表示受保护的继承。
  • 一个点线深绿色箭头表示私有继承。

{\LaTeX} 中的类图中的元素具有以下含义

  • 一个白色框表示一个类。框的右下角的一个标记表示该类具有隐藏的基类。如果框具有虚线边框,则表示虚拟继承。
  • 一个实线箭头表示公共继承。
  • 一个虚线箭头表示受保护的继承。
  • 一个点线箭头表示私有继承。

由 dot 工具生成的图中的元素具有以下含义

  • 一个白色框表示一个类、结构或文件。
  • 带有红色边框的框表示一个节点,该节点具有比显示的更多的箭头!换句话说:该图相对于此节点被截断了。有时截断图的原因是为了防止图像变得过大。对于使用 dot 生成的图形,Doxygen 尝试将结果图像的宽度限制为 1024 像素。
  • 一个黑色框表示当前正在显示该类的文档。
  • 一个深蓝色箭头表示包含关系(对于包含依赖关系图)或公共继承(对于其他图)。
  • 一个深绿色箭头表示受保护的继承。
  • 一个深红色箭头表示私有继承。
  • 一个紫色虚线箭头表示“使用”关系,箭头的边缘用负责关系的变量标记。如果类 A 具有类型为 C 的成员变量 m,其中 B 是 C 的子类型(例如,C 可以是 BB*T<B>*),则类 A 使用类 B

目录依赖关系图中的元素具有以下含义

  • 带有粗体边框的框表示生成目录依赖关系图的目录。
  • 带有红色实线边框的框表示其子目录未在图中显示的目录(“已截断”)。要配置在图中显示的子目录的深度,请参阅 DIR_GRAPH_MAX_DEPTH
  • 带有红色虚线边框的框表示一个截断的目录,其父目录也没有在图中显示。
  • 带有虚线边框(非红色)的框表示并非所有子目录都显示,但至少显示了一个子目录。
  • 带有浅灰色边框的框表示具有以下两个属性的目录
    • 其父目录未显示。
    • 至少显示了一个子目录。
  • 没有背景色的框表示一个目录,该目录不是显示的源目录的父目录的子目录。源目录是显示目录依赖关系图的目录。
  • 两个框之间的箭头表示两个目录之间的包含依赖关系。如果一个目录中的文件包含另一个目录的文件,则存在包含依赖关系。如果参与包含依赖关系的目录未在图中显示,则箭头将附加到显示的第一个父目录。此父目录显示为截断(见上文)。

以下是一些头文件,它们共同展示了 Doxygen 可以生成的各种图

diagrams_a.h

#ifndef DIAGRAMS_A_H
#define DIAGRAMS_A_H
class A { public: A *m_self; };
#endif

diagrams_b.h

#ifndef DIAGRAMS_B_H
#define DIAGRAMS_B_H
class A;
class B { public: A *m_a; };
#endif

diagrams_c.h

#ifndef DIAGRAMS_C_H
#define DIAGRAMS_C_H
#include "diagrams_c.h"
class D;
class C : public A { public: D *m_d; };
#endif

diagrams_d.h

#ifndef DIAGRAM_D_H
#define DIAGRAM_D_H
#include "diagrams_a.h"
#include "diagrams_b.h"
class C;
class D : virtual protected A, private B { public: C m_c; };
#endif

diagrams_e.h

#ifndef DIAGRAM_E_H
#define DIAGRAM_E_H
#include "diagrams_d.h"
class E : public D {};
#endif

单击此处查看 Doxygen 生成的相应 HTML 文档。请注意,使用 EXTRACT_ALL = YES 来生成图表。

转到下一节或返回索引