Я заметил, что 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;
}
Я думаю, что это признак известной проблемы в 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
как переменная вместо функции.
Других решений пока нет …