16

私はグーグルを十分に行ったので、

class SubObject {

public:
//blah blah blah
};

class Aggregate {
public:
   boost::shared_ptr<SubObject>   m_ptr;
};

次のようなダミーの宣言がある場合、Doxygenに「正しい」コラボレーション図を作成させることができます。

namespace boost { template<class T> class shared_ptr { T *dummy; }; }

私のヘッダーファイルで。

私の質問は、すべてのファイルにその行を実際に含めることなく、すべてのプロジェクトとすべてのヘッダーでそれを機能させるにはどうすればよいですか?

4

3 に答える 3

12

えーと……自分の質問に答えるのはばかげていると思いますが、投稿した直後にこれがわかります。

コードスニペットを配置します

namespace boost { template<class T> class shared_ptr { T *dummy; }; }

「doxygen_dummy.h」のようなヘッダーファイルに入れ、プロジェクトのワークスペースまたはディレクトリに含まれていることを確認します。実際にどこかに#includeする必要はありません(実際、One Definition Ruleに違反しないようにするために、含める必要はありません)。Doxygenがすべてのファイルをスキャンするときにそれを表示できるようにする必要があります。

于 2010-03-02T14:35:09.753 に答える
9

エリックに感謝します、それはうまくいきました。ただし、コラボレーション図を拡張する追加のダミークラスが気に入らなかったため、これについてもう少し詳しく説明しました。このDoxyfile設定は、すべてのboost::smart_ptrコードをT*に変更します。これにより、smart_ptrがバイパスされ、コラボレーション図のタイプへの直接リンクが作成されます。

INPUT_FILTER = "sed 's/boost::shared_ptr<\(.*\)>/\1*/'"

これは、smart_ptrへのすべての参照をプレーンポインターとして実際に非表示にするため、最終的なドキュメントに必要なものではない可能性がありますが、コラボレーション図ははるかに読みやすくなります。

于 2012-01-26T03:25:42.473 に答える
3

質問は時代遅れかもしれませんが、私はMattiasFのソリューションを試しましたが、完璧ではありません(私は非難していません)。

IMOは、shared_ptrの適切なソリューションではないdoxygen_dummyヘッダーを使用します。shared_ptrクラスはメモリ管理のみを目的としており、Doxygenのドキュメントでは確かに必要ありません。

職場では、sedでINPUT_FILTERを使用しています。私は良いパターンを見つけました(mem ::は名前空間エイリアスです):

INPUT_FILTER = "sed -e \"s/mem::shared_ptr<\([a-zA-Z0-9_]*\)> /\1* /g\" -e \"s/mem::shared_ptr<\(.*\)> /\1* /g\""

最初のパターンは、すべてのshared_ptrを単純なテンプレートと一致させます。つまり、テンプレートのないタイプを意味します。2番目のパターンは、他のすべてのshared_ptrと一致し、テンプレートが複合型(テンプレート付き)であっても一致します。

私は欠点を見つけました:'::'を含むテンプレートとしての完全修飾名はまだ処理されていません。まだ行っていない解決策は、最初のsedのパターンに「文字」::を追加することです。

于 2015-07-09T09:32:02.597 に答える