Документирование макрофункций в C++ с помощью Doxygen

Как мне задокументировать функцию макроса на C++ с помощью Doxygen и ссылаться на нее в документации моего кода, отличного от Evil?

В частности, у меня есть некоторый обычный класс под названием «Сообщение», определенный в Message.H, от которого пользователи могут наследоваться для определения своих собственных сообщений. В другом файле ("MessageHelpers.H") у меня есть такой сумасшедший макрос:

//! Users must call this macro to register their messages...
/*! 
   ...lest they be forced to type all sorts of boring and 
   error-prone boiler plate code. 
   blah blah blah... More specific documentation and explanation...
*/
#define REGISTER_MESSAGE_TYPE(MSGTYPE) \
 do_some(MSGTYPE);                     \
 seriously();                          \
 crazy_stuff(MSGTYPE);                       

В документации к Message мне бы понравилось, если бы фраза «REGISTER_MESSAGE_TYPE» могла автоматически становиться ссылкой и указывать на мою документацию для макроса. Например.

//! A cool message class
/*! 
   Users can inherit from this class to create their own cool messages.
   Just be sure to call REGISTER_MESSAGE_TYPE after your class definition!
*/
class Message
{
  virtual void doSomeStuff();
};

Это возможно?


person rcv    schedule 27.12.2010    source источник


Ответы (1)


См. http://www.doxygen.nl/manual/index.html.

В разделе "Специальные команды" перечислены \def команда и раздел "Автоматическая генерация ссылок" описывает, что вы хотите связать с макросом.

Используйте \def для документирования макроса отдельно от объявления.
Используйте #MACRO(params) для автоматической ссылки на указанное определение макроса.

person Guerrero    schedule 27.12.2010
comment
У меня это не работает. Я попытался скопировать макрос ABS из примера здесь stack.nl/~dimitri/doxygen/autolink.html, но документация не была сгенерирована, и ссылка в моем коде #ABS(x) не была связана. Я должен делать что-то неправильно в моем файле конфигурации? - person rcv; 28.12.2010
comment
Я не знаю, является ли это вашей проблемой, но убедитесь, что вы задокументировали файл где-то, где определен макрос. Попробуйте либо /*! \file / или /* @file */ и посмотрите, выдал ли doxygen какие-либо предупреждения. Источник: stack.nl/~dimitri/doxygen/docblocks.html поиск для глобальных объектов. (отредактируйте - символы косой черты не работают, но они должны быть многострочными маркерами комментариев) - person Guerrero; 28.12.2010
comment
Да, у меня есть /*! @file имя_файла.h описание... */ вверху каждого файла.. Интересно, что определение моего макроса вообще не отображается в моей документации MessageHelpers.H. - person rcv; 28.12.2010
comment
Используя интерфейс Doxygen GUI, если я перейду на вкладку «Эксперт», тему «Препроцессор» и сниму флажок ENABLE_PREPROCESSING, он перестанет документировать образец... Но затем я получаю предупреждение: явный запрос ссылки на «ABS (x)» не может быть разрешен в выход. Мне жаль, что я не мог больше помочь. - person Guerrero; 28.12.2010
comment
Ах ха! ENABLE_PREPROCESSING помог, спасибо за помощь. - person rcv; 28.12.2010