使用氧气记录C++概念

Documenting a C++ concept using doxygen?

本文关键字:C++ 概念 记录 氧气      更新时间:2023-10-16

有没有一种方便的方法可以在doxygen中记录C++概念?我想在提升文档中有这样的文档。

在与Doxygen进行了一些斗争之后,我终于得出了以下解决方案。

  1. 为您的概念定义一个组:使用页面并不合适,因为页面应该指示其子页面(从树的顶部到底部),而组表示可能有许多父组。这允许:

    • 将概念添加到一个或多个父概念,而不更改父概念本身(概念的细化/概括)
    • 实体链接到多个概念,而不更改概念本身(例如,将类添加到实现特定概念的库时)

    /*!@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 ...
     * @}
     */
    
  2. 定义一个自定义命令concept一个参数:

    ALIASES += concept{1}="@ingroup 1n@par Implemented concepts:n@ref 1"
    

    命令:

      将实体包含在定义概念的组中
    • :实体将出现在概念的文档中(实体可能出现在多个组中)
    • 添加一个段落,Implemented concepts提供指向已实现概念的链接。
  3. 指示特定类/结构实现该概念:

    //!@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对模板参数进行注释/记录。

我目前使用单独的手册页来记录概念并将 sectionsubsection 分组。然后,我可以使用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) 所以现在你得到了你想要的!!- 为您的概念提供一个单独的页面,并且能够从需要该概念的所有类中引用它。