2015-05-10 5 views
2

У меня есть ситуация, когда мне нужно документировать подпись bsearch() в Doxygen. Эта подпись выглядит следующим образом:Указатель функции C++ как параметр в Doxygen

void * __cdecl bsearch (
    const void *key, 
    const void *base, 
    size_t num, 
    size_t width, 
    int(__cdecl *compare)(const void *, const void *) 
    ) 

Проблема, которую я имею, как составить команду @param для указателя * сравнить, так как Doxygen жалуется "аргумента„сравнить“из команды @param не найден в аргументе список bsearch "во всем, что я бросаю на него.

Это автономный реализация, так что это не зависит от библиотеки подписи, но я имею в виду, если я сделал:

typedef int(__cdecl *pcompare)(const void *, const void *); 

изменения подписи pcompare сравнить звонящие с использованием стандартной подписи будет иметь типа.

Я открыт для ЛЮБОГО решения, которое позволяет мне документировать это без предупреждения от Doxygen.

+0

Использование 'bsearch' - это код C++ - это потеря на всех учетных записях - он не является типичным, и он медленнее, чем эквивалентные C++-шаблонные функции, такие как' std :: binary_search' и 'std :: lower_bound' –

+0

Thank вы, Бен. Дело в том, что проект под рукой - это модернизация и настройка Libctiny, ну на самом деле minicrt, поэтому есть некоторые ограничения. Для моего собственного использования я отрублю это дело даже больше, чем это, поскольку я намерен убрать пуристов с моей спины в последний раунд utils, выходящий в .NET, при этом exe действительно маленький. –

ответ

5

однако я имею в виду, если я сделал:

typedef int(__cdecl *pcompare)(const void *, const void *); 

изменения подписи pcompare compare, что абоненты, использующие стандартную подпись будет иметь проблемы типа.

Вы должны были попробовать это, прежде чем сдаваться. typedef не определяет новый тип, он просто создает новый идентификатор для сложного типа. Полученные подписи идентичны.

Будьте осторожны, поскольку ни одна из представленных форм не является правильной подписью. Чтобы объявить библиотечную функцию C C, такую ​​как bsearch, вам нужно extern "C". (и так будет указатель функции typedef - языковая привязка является частью типа функции)

Все, что сказано, просто установка __cdecl в качестве предопределенного макроса в вашей конфигурации doxygen, вероятно, будет достаточным, чтобы позволить ему анализировать все эти вариации, включая те, которые содержат сложный набор токенов, определяющих тип параметра.

+0

Я действительно не пробовал, потому что я действительно не использую его. Документирование времени выполнения было удивительным опытом обучения. Спасибо, что подтвердил, что я думал, что прочитал. Я все еще должен обернуть голову вокруг «extern» C «', который находится выше 'bsearch' в файле, но' typedef' определенно делает лучшую работу, не выдувая макет Doxygen sig. –

0

Нет проблем с typedef.
Вы должны использовать его в любом случае - это яснее читать.

Смежные вопросы