在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();
是否有任何doxygen标准化选项相当于“不应该明确指定!!!” ?
答案 0 :(得分:3)
在我看来,整个模板是不同界面的实现细节:
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预处理器将其删除,并且它不会出现在生成的文档中。
答案 1 :(得分:0)
传达不应指定参数的一个选项是将其隐藏在文档中。例如,您可以有条件地编译出内部参数:
/// \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();
这会阻止它们出现在文档中,但它们仍然可用于实现。