Есть ли в doxygen какой-либо общий способ указать, что некоторые параметры шаблона C ++ для параметров функции являются деталями реализации и не должны указываться пользователем?
Например, параметр шаблона, используемый в качестве счетчика уровня рекурсии в методе метапрограммирования, или параметр SFINAE в функции?
Например :
/// \brief Do something
/// \tparam MyFlag A flag...
/// \tparam Limit Recursion limit
/// \tparam Current Recursion level counter. SHOULD NOT BE EXPLICITELY SPECIFIED !!!
template<bool MyFlag, unsigned int Limit, unsigned int Current = 0> myFunction();
Есть ли нормализованный вариант с кислородом, эквивалентный «НЕ ДОЛЖНО БЫТЬ УКАЗАНО !!!» ?
Мне кажется, что весь шаблон — это деталь реализации другого интерфейса:
template<bool MyFlag, unsigned int Limit, unsigned int Current = 0> myFunctionImpl();
template<bool MyFlag, unsigned int Limit> myFunction() {
myFunctionImpl<MyFlag, Limit, 0>();
}
Теперь становится проще документировать: myFunction()
(и все его аргументы) являются частью интерфейса, который не включает счетчик итераций. myFunctionImpl()
является реализацией этого интерфейса и не нуждается в документировании вообще (или только в минимальной степени с комментарием, утверждающим, что это деталь реализации, и пользовательский код не должен зависеть от него или использовать его напрямую). Если вы хотите, вы можете заключить реализацию в #ifdef
блокировать так, чтобы препроцессор doxygen удалил его, и он не появился в сгенерированной документации.
Один из способов сообщить, что параметр не должен быть указан, — это скрыть его в документации. Например, вы можете условно скомпилировать внутренние параметры:
/// \brief Do something
/// \tparam MyFlag A flag...
/// \tparam Limit Recursion limit
template<bool MyFlag, unsigned int Limit
#if !defined(DOXYGEN)
, unsigned int Current = 0
#endif
> myFunction();
Это предотвратит их появление в документации, но они все равно будут доступны для реализации.