doxygen で C++ の概念を文書化する便利な方法はありますか? ブーストのドキュメントに、このようなドキュメントをいくつか用意したいと思います。
5 に答える
Doxygenに苦労した後、最終的に次の解決策にたどり着きました。
コンセプトのグループを定義します。ページはそのサブページ (ツリーの上から下) を示す必要があるため、ページの使用は適切ではありませんが、グループは潜在的に多くの親グループを示します。これにより、次のことが可能になります。
- 親概念自体を変更せずに、1 つ (または複数) の親概念に概念を追加する (概念の洗練/一般化)
- 概念自体を変更せずにエンティティを複数の概念にリンクする (例: 特定の概念を実装するライブラリにクラスを追加する場合)
例
/*!@defgroup measurement_functor_concepts Measurement function objects * @ingroup generalconcepts * @{ * @par Description * blablabla * * @par Notations * Let @c F be the type of the function object, @c f an instance. * * @par Valid Expressions * - @c f function object is ... * - <b>f.result()</b> returns ... * @} */
concept
1 つの引数でカスタム コマンドを定義します。ALIASES += concept{1}="@ingroup \1\n@par Implemented concepts:\n@ref \1"
コマンド:
- 概念を定義するグループにエンティティを含めます: エンティティは概念のドキュメントに表示されます (エンティティは複数のグループに表示される場合があります)。
Implemented concepts
実装された概念へのリンクを提供する段落を追加します。
特定のクラス/構造体が概念を実装していることを示します。
//!@brief Does things... //!@concept{measurement_functor_concepts} template <class T> struct my_struct: public std::unary_function<T, void> {};
Boost のような素敵なドキュメント (有効な式の素敵なテーブルなど) を生成する方法は見つかりませんでしたが、少なくともこのドキュメントの編成は物事を適切に分離しています。
できることは、Concept と呼ばれるカスタム タグを定義することです。これを説明どおりに使用できます。この例は、次のような Doxygen のエイリアス メカニズムを使用することです。
エイリアス += "con=\xrefitem con \"コンセプト\" \"コンセプト\""
テンプレート パラメーター\tparam
に関するコメント/文書化に使用できます。
次のことを検討することをお勧めします。
a) Boost Concept Checking ライブラリのドキュメントを参照してください。このドキュメントでは、コードで使用できるクラスを作成して、at 型が定義したい概念の要件を実際に満たしていることを確認する方法を示します。次のように使用します。
template<typename T>
my_class{
MyConcept(T); // provokes compile error if T does not match concept
T m_t;
};
参考までに、コンセプト チェック クラスの作成に使用される要素とコンセプト ライト プロポーザルの間には 1 対 1 の対応があります。したがって、concepts lite が実際に機能している場合、移行は簡単なはずです。
b) DOxygen を使用して、MyConcept チェック クラスを文書化します !!!
c) my_class ドキュメントで DOxygen /tparam を使用して、MyConcept を参照します。
c) これで、まさにあなたが求めていたものを手に入れることができました!!! - あなたのコンセプトのための別のページ、およびそのコンセプトを必要とするすべてのクラスからそれを参照する機能。
私は現在、別々のマニュアルページを使用して概念を文書化し、 と でグループ化してい\section
ます\subsection
。その後、 でそれらにリンクできます\ref
。これは、提供したリンクのように表を使用して概念を説明している限り機能しますが、残念ながら単一のセクションへのリンクは有効になりません。
型がモデル化する概念のリストを作成するエイリアスもあります。