gpt4 book ai didi

C++ 元编程 doxygen 文档

转载 作者:IT老高 更新时间:2023-10-28 21:58:00 25 4
gpt4 key购买 nike

我正在记录一些大量使用元编程的代码,例如:

 template<rysq::type A, rysq::type B, rysq::type C, rysq::type D, class Transform>
struct Kernel<meta::braket<A,B,C,D>, Transform,
typename boost::enable_if<
quadrature<meta::braket<A,B,C,D>, Transform> >::type>
: Eri <Transform> {

用 doxygen 记录这种结构的好方法是什么?

最佳答案

使用预处理器宏。这是来自 the not-yet-official Boost.XInt library 的示例(目前正在排队等待审核以包含在 Boost 中):

#ifdef BOOST_XINT_DOXYGEN_IGNORE
// The documentation should see a simplified version of the template
// parameters.
#define BOOST_XINT_INITIAL_APARAMS ...
#define BOOST_XINT_CLASS_APARAMS ...
#define BOOST_XINT_CLASS_BPARAMS other
#define BOOST_XINT_APARAMS ...
#define BOOST_XINT_BPARAMS other
#else
#define BOOST_XINT_INITIAL_APARAMS \
class A0 = parameter::void_, \
class A1 = parameter::void_, \
class A2 = parameter::void_, \
class A3 = parameter::void_, \
class A4 = parameter::void_, \
class A5 = parameter::void_
#define BOOST_XINT_CLASS_APARAMS class A0, class A1, class A2, class A3, \
class A4, class A5
#define BOOST_XINT_APARAMS A0, A1, A2, A3, A4, A5
#define BOOST_XINT_CLASS_BPARAMS class B0, class B1, class B2, class B3, \
class B4, class B5
#define BOOST_XINT_BPARAMS B0, B1, B2, B3, B4, B5
#endif

在任何需要它们的地方使用 #defined 宏名称而不是模板参数,如下所示:

/*! \brief The integer_t class template.

This class implements the standard aribitrary-length %integer type.

[...lots more documentation omitted...]
*/
template<BOOST_XINT_INITIAL_APARAMS>
class integer_t: virtual public detail::integer_t_data<BOOST_XINT_APARAMS>,
public detail::nan_functions<detail::integer_t_data<BOOST_XINT_APARAMS>::
NothrowType::value, // ...lots more base classes omitted...
{
// ...etcetera

然后在 Doxyfile 中加入这样的行:

PREDEFINED             = BOOST_XINT_DOXYGEN_IGNORE

EXPAND_AS_DEFINED = BOOST_XINT_INITIAL_APARAMS \
BOOST_XINT_CLASS_APARAMS \
BOOST_XINT_CLASS_BPARAMS \
BOOST_XINT_APARAMS \
BOOST_XINT_BPARAMS

结果是 Doxygen 看到模板参数的“...”或“其他”,而编译器看到的是真实的。如果您在类本身的文档中描述模板参数,那么库的用户只需要在他可能会查找它们的一个地方看到它们;它们会隐藏在其他任何地方。

作为此设计的一个额外优势,如果您需要更改模板参数列表,您只需在宏定义和实际使用更改参数的函数中更改它们。其他一切都会自动适应。

关于C++ 元编程 doxygen 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com