Ссылки в блоках Doxygen `@ code` иногда отсутствуют

Я заметил, что 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

Решение

Я думаю, что это признак известной проблемы в Doxygen. От http://www.stack.nl/~dimitri/doxygen/trouble.html

В некоторых случаях избыточные скобки могут сбить с толку кислород. Например:

void f (int);

правильно анализируется как объявление функции, но

const int (a);

также рассматривается как объявление функции с именем int,
потому что анализируется только синтаксис, а не семантика. Если
избыточные скобки могут быть обнаружены, как в

int *(a[20]);

тогда doxygen удалит скобки и правильно проанализирует результат.

Так что в этом случае я считаю:

U u(42);

интерпретируется как функция, а не как объявление переменной.

К сожалению, я не знаю ни одного варианта явного добавления ссылок в блок кода. Единственный обходной путь, который я нашел, — это реструктурировать код, чтобы объявление не выглядело как функция для Doxygen. Например, изменив инициализацию вашей переменной на это:

U u = U(42);

позволяет Doxygen распознавать u как переменная вместо функции.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector