如何使用doxygen编写C ++模板和模板元函数?

有没有关于如何使用DoxygenloggingC ++模板和模板元函数的指南?

例如:

/// @brief metafunction for generation of a map of message types to /// their associated callbacks. /// @tparam Seq the list of message types template< class Seq > struct generate_callback_map { typedef typename mpl::transform< Seq , build_type_signature_pair< mpl::_1 > >::type vector_pair_type; typedef typename fusion::result_of::as_map< vector_pair_type >::type type; }; 

到目前为止,我已经看到了以下build议:

  • @tparam用于logging模板参数。
  • @arg替代模板参数的备选方法。
  • @brief用来描述元函数。

应如何logging元函数的“返回types”?

有没有人有任何好的build议或个人喜好使用Doxygen的C + +模板?

我不认为这是可能的使用文档高级模板结构doxygen,因为它最初是为面向对象的范例而不是元编程devise的。 作为一个例子,GNU STL(libstdc ++)使用doxygen,但是在STL中logging元编程的function很差 。

另一方面,boost使用自己的工具: QuickBook使用独立的文本文件和doxygenlogging的源生成BoostBook标记( DocBook的扩展),反过来生成html / pdf。 结果比libstdc ++更具信息性,但显然涉及到dev的更多工作。

由于boost文档可以说是最好的元编程之一,所以你可以走这条路,特别是因为它补充了doxygen – 你可以重用你现有的标记。

虽然它不能完全回答你的问题,但你可能会对最近的铿锵声发展感兴趣。 使用--with-extra-options=-Wdocumentation构buildclang时,它将语义检查您的代码中的doxygen标记,并生成文档警告。 强制您保持文档/代码同步。

使用@tparam模板参数, @tparam作为函数参数。 对于返回值, @return return。 这里没有回报。 只有typedef s。

顺便说一句,你的示例代码看起来不像一个元函数。 元函数是毛茸茸的野兽,它利用SFINAE来完成C ++本来不想要的东西(例如reflection)。 您的generate_callback_map只是一个用于模板typedef的C ++ 03替身。

你所缺less的是关于你的typedefs的文档和关于如何使用这个模板的文档。

 /// @brief metafunction for generation of a map of message types to /// their associated callbacks. /// @details /// Usage: Use <tt>generate_callback_map<Type>::type</tt> to ... /// @tparam Seq the list of message types /// template< class Seq > struct generate_callback_map { /// @brief It's a good idea to document all of your typedefs. typedef typename mpl::transform< Seq , build_type_signature_pair< mpl::_1 > >::type vector_pair_type; /// @brief This is why generate_callback_map exists. Document it! typedef typename fusion::result_of::as_map< vector_pair_type >::type type; };