模板或函数参数作为doxygen中的实现细节?

时间:2012-09-15 02:41:40

标签: c++ parameters doxygen

在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标准化选项相当于“不应该明确指定!!!” ?

2 个答案:

答案 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();

这会阻止它们出现在文档中,但它们仍然可用于实现。