1

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

4

2 回答 2

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 预处理器将其删除并且它不会出现在生成的文档中。

于 2012-09-15T03:50:13.203 回答
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();

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

于 2012-09-15T03:35:07.170 回答