2012-04-10 15 views

答えて

3

あなたができることは、コンセプトというカスタムタグを定義することです。コンセプトは、あなたが記述したとおりに使用できます。これのexampleは、Doxygenの中のようなものエイリアス・メカニズムを使用することです:

ALIASES + = "CON = \ xrefitem詐欺\" コンセプト\ "\ "の概念\""

+3

申し訳ありませんが、エイリアスの定義がどのように役立つかは明白ではありません概念を文書化する際に使用します。おそらく例を挙げて、この答えを広げることができますか? –

2

\tparamを使用して、template parametersにコメント/ドキュメントすることができます。

+1

このテンプレートパラメータをインスタンス化するクラスを概念xyzで実装する必要があると言うには、 '\ tparam'を使用できます。しかし、どのように概念自体を文書化しますか? – proto

+0

私はあなたが探しているものを理解しているか分かりません。 xyzのコンセプトはそうだと言っているが、それはおそらくコンセプト自体のドキュメントを書いておくのに最適な場所ではないと言っている。コンセプトの実際のクラス/構造体を持っている場合は、他のクラスと同じようにドキュメントを書くことができます – Attila

+1

C++を使ってコンセプトを指定する方法がないため(まだ)、クラス(またはファイル)の概念を説明する。それを実装するクラスだけがあります。私は、これを回避するための確立された方法があり、私のdoxygen出力のコンセプトのドキュメンテーションを含んでいるのかどうか疑問に思いました。 – proto

1

私は現在、別のマニュアルページを使用します概念を文書化し、\section\subsectionでグループ化します。私は\refでそれらにリンクすることができます。これは、与えたリンクのようにテーブルの概念を記述している限り機能しますが、残念ながら単一のセクションへのリンクは有効になりません。

また、型モデルの概念のリストを作成する別名もあります。

+0

+1は私のセクションを参照するのに役立ちました。 –

6

Doxygenと苦労した後、私は最終的に次のような解決策に出た。

  1. あなたの概念のためのグループを定義します。グループは潜在的に多くの親グループを示しながらページは、(上から木の下に)そのサブページを示す必要がありますので、ページを使用すると、その適切ではありません。これは、可能:

    • を変更することなく、いくつかの概念をエンティティのリンク親概念自体(概念の改良/一般)
    • を変更することなく、1つ(またはそれ以上)の親概念(複数可)の概念を追加しますコンセプト自体(例えば、特定の概念を実装するライブラリにクラスを追加するとき)

    /*[email protected] 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 ... 
    * @} 
    */ 
    
  2. 定義

    ALIASES += concept{1}="@ingroup \1\[email protected] Implemented concepts:\[email protected] \1" 
    

    コマンド:

    • は、概念を定義するグループにエンティティが含まれています。エンティティは、(エンティティが、いくつかの中に表示されることがあり概念のドキュメントに表示されます一つの引数を持つカスタムコマンドconceptグループ)
    • は、実装された概念へのリンクを提供するImplemented conceptsの段落を追加します。
  3. は、特定のクラス/構造体は、概念を実装していることを示しています

    //[email protected] Does things... 
    //[email protected]{measurement_functor_concepts} 
    template <class T> 
    struct my_struct: public std::unary_function<T, void> {}; 
    

私はブースト有効な式のために(素敵なテーブルのような素敵なドキュメントを生成する方法を見つけることができませんでした、など)が、少なくともドキュメントのこの組織は物事を適切に分離します。

a)のライブラリをチェックブーストコンセプトのドキュメントを見てください:

1

は、私はあなたが以下の点を考慮示唆しています。このドキュメントでは、コードで使用できるクラスを作成して、タイプで実際に定義したいコンセプトの要件を満たしていることを確認する方法を示します。

template<typename T> 
my_class{ 
    MyConcept(T); // provokes compile error if T does not match concept 
    T m_t; 
}; 

FYIコンセプト・チェックのクラスを作成する際に使用される要素とと概念liteの提案との1対1の対応があります:あなたはこのようにそれを使用しています。したがって、コンセプトライトが実際に動作しているときは、簡単に移行する必要があります。

b)DOxygenを使用してMyConcept検査クラスを文書化してください。

C)MyConcept

Cを参照するmy_classマニュアルの使用Doxygenの/のTParam)だから今、あなたはあなたが求めている正確に何を持っています!あなたのコンセプトのための別のページと、そのコンセプトを必要とするすべてのクラスからそれを参照する能力。

関連する問題