trb*_*abb 16 c++ templates doxygen
C++的一个(如此多)不幸的设计缺陷是,当使用模板元编程时,基本上不可能将实现与接口分开.
在我的图书馆里,我有类似的东西:
template <typename Ma, typename Mb>
typename boost::enable_if_c<
detail::IsMatrix<Ma>::val and detail::IsMatrix<Mb>::val and
detail::MatrixDimensionCheck<Ma,Mb>::isStaticMatch,
bool>::type
operator==(const Ma &a, const Mb &b) {
return detail::matrixEqual(a,b);
}
Run Code Online (Sandbox Code Playgroud)
如果这是不可读的,我不怪你.bool如果参数是矩阵并匹配维度,那么大部分混乱只是定义返回类型,如果它们是其他东西则是未定义的(因此依赖SFINAE来防止此运算符隐藏其他重要事物).
由于本质上是静态类型检查函数的内容现在已嵌入到我的普通C++函数的签名中,因此这些实现内容将出现在生成的文档中.
我不希望用户必须阅读此内容.他们需要知道的是,这个函数返回一个bool(通过阅读上面几乎不可能知道).在文档中,我可以用简单的英语简洁地解释这个操作符只接受矩阵.
有没有办法说服Doxygen将那种类型弄得乱七八糟bool?(我假设在代码中或多或少没有办法在代码中直接清除它,但如果你能想到某些东西,欢迎这些想法).
dun*_*123 -1
我想这可能对你有用。显然,这是一个比您的示例更简单的示例,但基本思想是使用记录的模板函数,而不enable_if调用另一个未记录但提供 SFINAE 的“隐藏”函数。
// Ignore this function in doxygen
template <typename T>
typename boost::enable_if<boost::is_unsigned<T>, bool>::type
test_hidden(T t) {
return true;
}
template <typename T>
typename boost::disable_if<boost::is_unsigned<T>, bool>::type
test_hidden(T t) {
return false;
}
// Document this function
template <typename T>
bool test(T t)
{
return test_hidden(t);
}
int main()
{
unsigned int a = 1;
int b = 0;
std::cout << test(a) << std::endl; // true
std::cout << test(b) << std::endl; // false
return 0;
}
Run Code Online (Sandbox Code Playgroud)