【发布时间】:2012-04-10 10:38:28
【问题描述】:
有没有一种方便的方法可以在 doxygen 中记录 C++ 概念?我想要一些像this in the boost documentation 这样的文档。
【问题讨论】:
标签: c++ documentation doxygen
有没有一种方便的方法可以在 doxygen 中记录 C++ 概念?我想要一些像this in the boost documentation 这样的文档。
【问题讨论】:
标签: c++ documentation doxygen
在与 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 \1\n@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 的自定义标签,然后您可以按照您的描述使用它。其中一个example 是使用 Doxygen 中的别名机制,类似于:
ALIASES += "con=\xrefitem con \"Concept\" \"Concepts\" "
【讨论】:
您可以使用\tparam 对template parameters 发表评论/记录。
【讨论】:
\note 说 xyz 概念是某某,但这可能不是为该概念本身编写文档的最佳位置。如果您有一个实际的概念类/结构,您可以为它编写文档,就像为任何其他类编写文档一样
我目前使用单独的手册页来记录概念并将 \section 和 \subsection 分组。然后我可以使用\ref 链接到他们。只要您在提供的链接中使用表格描述概念,这就会起作用,但遗憾的是不会启用指向单个部分的链接。
我还有一个别名来创建类型模型的概念列表。
【讨论】:
我建议你考虑以下几点:
a) 查看 Boost 概念检查库的文档。本文档向您展示了如何创建一个可在您的代码中使用的类,以验证 at 类型实际上满足您要定义的概念的要求。你可以这样使用它:
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) 所以现在你得到了你想要的东西!!! - 您的概念的单独页面,以及从需要该概念的所有课程中引用它的能力。
【讨论】: