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);
}
如果这是不可读的,我不怪你。大多数这种混乱只是简单地将返回类型定义为bool
参数是矩阵和匹配维度,如果它们是其他东西则未定义(因此依赖 SFINAE 来防止该运算符隐藏其他重要的东西)。
由于本质上是静态类型检查函数的内容现在已嵌入到我的普通 C++ 函数的签名中,因此这些实现内容将出现在生成的文档中。
我不希望用户必须阅读此内容。他们只需要知道这个函数返回 a bool
(这几乎不可能通过阅读上面的内容来判断)。在文档中,我可以用简单的英语简洁地解释这个运算符只接受矩阵。
有没有办法说服 Doxygen 将这种类型的混乱渲染为bool
? (我假设或多或少没有办法直接在代码中清理它,但如果你能想到一些想法,欢迎提出想法)。