4

デフォルトのコンストラクターが引数をとらない場合、Doxygenはインスタンスからのメンバー関数呼び出しをリンクできますが、コンストラクターが引数をとる場合、それらをリンクできないことに気付きました。

  • 何故ですか?
  • @code/@endcodeブロック内に手動でリンクを追加する回避策はありますか?

以下の例では:

  • t.foo()-foo()リンクされています
  • u.foo()-foo()リンクされていません

/** @file doxy.cpp */

/** struct T */
struct T {
  /** foo */
  void foo() { }
};

/** struct U */
struct U {
  int a; /**< int a */

  /** U */
  U(int a_) : a(a_) { }

  /** foo */
  void foo() { }
};

/**
 * main
 *
 * @code
 * T t;
 * t.foo();  // foo is linked
 *
 * U u(42);
 * u.foo();  // foo is not linked
 * @endcode
 */
int main()
{
  return 0;
}
4

1 に答える 1

2

これは、Doxygen の既知の問題の症状だと思います。http://www.doxygen.nl/manual/trouble.htmlから

冗長な中括弧は、場合によっては doxygen を混乱させる可能性があります。例えば:

void f (int); 

関数宣言として適切に解析されますが、

const int (a);

セマンティクスではなく構文のみが分析されるため、 int という名前の関数宣言とも見なされます。次のように、冗長なブレースが検出された場合

int *(a[20]); 

doxygen は中かっこを削除し、結果を正しく解析します。

したがって、この場合、私は次のように考えています。

U u(42);

変数宣言としてではなく、関数として解釈されています。

残念ながら、コード ブロック内に明示的にリンクを追加するためのオプションは知りません。私が見つけた唯一の回避策は、宣言が Doxygen にとって関数のように見えないようにコードを再構築することです。たとえば、変数の初期化を次のように変更します。

U u = U(42);

Doxygen がu関数ではなく変数として認識できるようにします。

于 2012-10-26T04:59:14.697 に答える