Doxygenは、C++クラスの継承図を生成するための組み込みサポートを備えています。
Doxygenは、Graphvizの "dot" ツールを使用して、より高度なダイアグラムとグラフを生成できます。Graphvizは、オープンソースのクロスプラットフォームのグラフ描画ツールキットであり、https://graphviz.dokyumento.jp/ で入手できます。
パスに "dot" ツールがある場合は、Doxygenで使用できるように、設定ファイルで HAVE_DOT を YES
に設定できます。
Doxygenは、"dot" ツールを使用して、以下のグラフを生成します。
- クラス階層のグラフィカルな表現が、テキストによる表現とともに描画されます。現在、この機能はHTMLでのみサポートされています。
警告: 非常に大規模なクラス階層があり、多くのクラスが共通の基底クラスから派生している場合、結果として得られる画像が大きすぎて、一部のブラウザでは処理できなくなる可能性があります。
- 各ドキュメント化されたクラスに対して、直接および間接的な継承関係を示す継承グラフが生成されます。これにより、組み込みのクラス継承図の生成が無効になります。
- インクルード依存関係グラフは、少なくとも1つの他のファイルをインクルードするドキュメント化されたファイルごとに生成されます。この機能は現在、HTMLおよびRTFでのみサポートされています。
- 逆インクルード依存関係グラフも生成され、どのファイルが(ヘッダー)ファイルをインクルードしているかを示します。
- グラフは、ドキュメント化された各クラスおよび構造体に対して描画され、以下を示します。
- 基底クラスとの継承関係。
- 他の構造体およびクラスとの使用関係(例:クラス
A
がクラス B
型のメンバ変数 m_a
を持つ場合、A
は m_a
をラベルとして持つ B
への矢印を持ちます)。
- CALL_GRAPH が YES に設定されている場合、グラフィカルな呼び出しグラフが各関数に対して描画され、関数が直接または間接的に呼び出す関数を示します(セクション \callgraph およびセクション \hidecallgraph も参照)。
- CALLER_GRAPH が YES に設定されている場合、グラフィカルな呼び出し元グラフが各関数に対して描画され、関数が直接または間接的に呼び出される関数を示します(セクション \callergraph およびセクション \hidecallergraph も参照)。
- DIRECTORY_GRAPH が
YES
に設定されている場合、Doxygenはすべてのディレクトリのディレクトリ依存関係を示すグラフを生成します。グラフはディレクトリをボックスとして示します。サブディレクトリは、親ディレクトリのボックス内にネストされて表示されます。グラフの深さは、DIR_GRAPH_MAX_DEPTH を通じて設定されます。ディレクトリ間のインクルード依存関係は矢印として示されます。
レイアウトファイルを使用すると、実際に表示されるグラフを決定できます。
オプション DOT_GRAPH_MAX_NODES および MAX_DOT_GRAPH_DEPTH を使用して、さまざまなグラフのサイズを制限できます。
HTMLおよびRTFのクラス図の要素には、次の意味があります。
- 黄色のボックスは、クラスを示します。ボックスの右下隅に小さなマーカーがある場合、そのクラスに非表示の基底クラスが含まれていることを示します。クラス図の場合、ツリーの最大幅は現在8要素です。ツリーがこれより広い場合、一部のノードは非表示になります。ボックスが破線パターンで塗りつぶされている場合、継承関係は仮想です。
- 白色のボックスは、クラスのドキュメントが現在表示されていることを示します。
- 灰色のボックスは、ドキュメント化されていないクラスを示します。
- 実線の濃い青色の矢印は、public継承を示します。
- 破線の濃い緑色の矢印は、protected継承を示します。
- 点線の濃い緑色の矢印は、private継承を示します。
クラス図の要素
には、次の意味があります。
- 白色のボックスは、クラスを示します。ボックスの右下隅のマーカーは、クラスに非表示の基底クラスがあることを示します。ボックスに破線の境界線がある場合、これは仮想継承を示します。
- 実線の矢印は、public継承を示します。
- 破線の矢印は、protected継承を示します。
- 点線の矢印は、private継承を示します。
dotツールによって生成されるグラフの要素には、次の意味があります。
- 白色のボックスは、クラス、構造体、またはファイルを示します。
- 赤色の境界線を持つボックスは、表示されているよりも多くの矢印を持つノードを示します!言い換えれば、グラフはこのノードに関して切り詰められています。グラフが時々切り詰められる理由は、画像が大きくなりすぎるのを防ぐためです。dotで生成されたグラフの場合、Doxygenは結果として得られる画像の幅を1024ピクセルに制限しようとします。
- 黒色のボックスは、クラスのドキュメントが現在表示されていることを示します。
- 濃い青色の矢印は、(インクルード依存関係グラフの)インクルード関係、または(他のグラフの)public継承を示します。
- 濃い緑色の矢印は、protected継承を示します。
- 濃い赤色の矢印は、private継承を示します。
- 紫色の破線の矢印は、「使用」関係を示し、矢印の端は関係の原因となる変数でラベル付けされています。クラス
A
がクラス B
を使用するのは、クラス A
がタイプ C のメンバ変数 m
を持ち、B が C のサブタイプである場合(例:C
は B
、B*
、T<B>*
など)。
ディレクトリ依存関係グラフの要素には、次の意味があります。
- 太字の境界線を持つボックスは、ディレクトリ依存関係グラフが生成されたディレクトリを示します。
- 赤色の実線の境界線を持つボックスは、そのサブディレクトリがグラフに表示されないディレクトリ(「切り詰められた」)を示します。グラフに表示されるサブディレクトリの深さを設定するには、DIR_GRAPH_MAX_DEPTH を参照してください。
- 赤色の破線の境界線を持つボックスは、切り詰められたディレクトリであり、その親ディレクトリもグラフに表示されないことを示します。
- 赤色以外の破線の境界線を持つボックスは、すべてではないが、少なくとも1つのサブディレクトリが表示されていることを示します。
- 薄い灰色の境界線を持つボックスは、次の2つの属性の両方を持つディレクトリを示します。
- その親ディレクトリは表示されません。
- 少なくとも1つのサブディレクトリが表示されます。
- 背景色なしのボックスは、ディレクトリ依存関係グラフが表示される元のディレクトリの親ディレクトリのサブディレクトリではないディレクトリを示します。起点は、ディレクトリ依存関係グラフが表示されるディレクトリです。
- 2つのボックス間の矢印は、2つのディレクトリ間のインクルード依存関係を示します。インクルード依存関係は、あるディレクトリ内のファイルが別のディレクトリのファイルをインクルードする場合に存在します。インクルード依存関係に関与するディレクトリがグラフに表示されない場合、矢印は表示される最初の親ディレクトリに接続されます。この親ディレクトリは、切り詰められたものとして表示されます(上記参照)。
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
が使用されていることに注意してください。
次のセクションに進むか、インデックスに戻ります。