使用氧气记录C++概念
Documenting a C++ concept using doxygen?
有没有一种方便的方法可以在doxygen中记录C++概念?我想在提升文档中有这样的文档。
在与Doxygen进行了一些斗争之后,我终于得出了以下解决方案。
-
为您的概念定义一个组:使用页面并不合适,因为页面应该指示其子页面(从树的顶部到底部),而组表示可能有许多父组。这允许:
- 将概念添加到一个或多个父概念,而不更改父概念本身(概念的细化/概括) 将
- 实体链接到多个概念,而不更改概念本身(例如,将类添加到实现特定概念的库时)
例
/*!@defgroup measurement_functor_concepts Measurement function objects * @ingroup generalconcepts * @{ * @par Description * blablabla * * @par Notations * Let @c F be the type of the function object, @c f an instance. * * @par Valid Expressions * - @c f function object is ... * - <b>f.result()</b> returns ... * @} */
-
定义一个自定义命令
concept
一个参数:ALIASES += concept{1}="@ingroup 1n@par Implemented concepts:n@ref 1"
命令:
- 将实体包含在定义概念的组中
- :实体将出现在概念的文档中(实体可能出现在多个组中)
- 添加一个段落,
Implemented concepts
提供指向已实现概念的链接。
-
指示特定类/结构实现该概念:
//!@brief Does things... //!@concept{measurement_functor_concepts} template <class T> struct my_struct: public std::unary_function<T, void> {};
我没有找到像 Boost 那样生成一个很好的文档的方法(有效表达式的漂亮表格等),但至少这种文档组织正确地将事情分开了。
您可以做的是定义一个名为 Concept 的自定义标记,然后可以按照您的描述使用它。这方面的一个例子是在 Doxygen 中使用别名机制,如下所示:
别名 += "con=\xrefitem con \"概念""概念"
tparam
对模板参数进行注释/记录。
我目前使用单独的手册页来记录概念并将 section
和 subsection
分组。然后,我可以使用ref
链接到它们。只要您使用表格描述概念,就像您提供的链接一样,这就可以工作,但不幸的是,不会启用指向单个部分的链接。
我还有一个别名来创建类型建模的概念列表。
我建议你考虑以下几点:
a) 查看 Boost 概念检查库的文档。 本文档介绍如何创建一个类,该类可在代码中使用,以验证 at type 是否实际满足要定义的概念的要求。 你像这样使用它:
template<typename T>
my_class{
MyConcept(T); // provokes compile error if T does not match concept
T m_t;
};
仅供参考,用于创建概念检查类的元素与概念精简版提案之间存在一对一的对应关系。 因此,当概念精简版实际工作时,过渡应该很容易。
b) 现在使用 DOxygen 来记录 MyConcept 检查类!!
c) 在my_class文档中使用 DOxygen/tparam 来引用 MyConcept
c) 所以现在你得到了你想要的!!- 为您的概念提供一个单独的页面,并且能够从需要该概念的所有类中引用它。
- 表示"accepting anything for this template argument" C++概念的通配符
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 实施具有 C++20 概念的配对概念
- 概念中的cv限定符需要表达式参数列表
- C++20概念:需要运算符重载
- 用概念检查属性的类型
- 方法重写线程C++中的概念
- 智能指针概念所有权和寿命
- C++20 概念:如何在"requires"子句中引用类名?
- 在模板函数中推导模板函数(使用C++概念)
- 满意和建模的概念?
- 成员变量与函数概念检查
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 概念可以与 CRTP 习语一起使用吗?
- 概念解析为使用 std::make_signed_t 时意外的函数模板
- 概念可以与模板模板参数一起使用吗?
- 关于C++中引用计数和循环引用的概念
- C++概念assignable_from不接受 const&-return 运算符=
- 不能制作需要布尔成员函数的C++20概念