Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何记录C++;模板和带doxygen的模板元函数?_C++_Templates_Doxygen - Fatal编程技术网

C++ 如何记录C++;模板和带doxygen的模板元函数?

C++ 如何记录C++;模板和带doxygen的模板元函数?,c++,templates,doxygen,C++,Templates,Doxygen,例如: /// @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

例如:

/// @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;
};
用于将消息类型映射生成到的简短元函数 ///它们关联的回调。 ///@tparam Seq消息类型列表 模板 结构生成回调映射 { typedef typename mpl::transform >::类型向量\ U对\ U类型; typedef typename fusion::result of::as_map::type; }; 到目前为止,我看到了以下建议:

  • @tparam
    用于记录模板参数
  • @arg
    记录模板参数的替代方法
  • @brief
    用于描述元函数
如何记录元函数的“返回类型”


有没有人对使用C++模板使用doxGy有什么好的建议或个人喜好?< /p> 使用<代码> @ tPARAM< <代码> >模板参数> <代码> @ ARG< /COD>函数参数。对于返回值,
@return
。这里没有回头路。只有
typedef
s

顺便说一句,您的示例代码看起来不像元函数。元功能是利用SFIEAE来完成C++最初不打算做的事情(例如,反射)的毛茸茸的动物。您的
generate_callback_map
看起来就像是模板typedef的C++03替代品

您缺少的是关于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;
};
用于将消息类型映射生成到的简短元函数 ///它们关联的回调。 ///@详情 ///用法:使用generate\u callback\u map::type to。。。 ///@tparam Seq消息类型列表 /// 模板 结构生成回调映射 { ///@brief记录所有的typedef是个好主意。 typedef typename mpl::transform >::类型向量\ U对\ U类型; ///@brief这就是生成回调映射存在的原因。记录它! typedef typename fusion::result of::as_map::type; };
我认为不可能将文档高级模板构造与doxygen一起使用,因为它最初是为面向对象的范例而设计的,而不是元编程。举例来说,GNU STL(libstdc++)使用doxygen,但在STL中对元编程进行了大量的文档化

另一方面,boost使用自己的工具:使用独立的文本文件和doxygen文档化的源代码生成标记(的扩展名),然后生成html/pdf。与libstdc++相比,它的信息量更大,但显然需要开发人员做更多的工作

因为boost文档可以说是元编程的最佳工具之一,所以您可以走这条路,特别是因为它补充了doxygen—您可以重用现有的标记


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

@Pubby:这是一个非常有用的建议。你会用什么,而不是?@JanHudec自己写,而不是生成它。当然,使用样式指南和一致的格式。可读代码对于TMP来说是一个巨大的优势,因为它们是一个泄漏的抽象。使用PUEDoCODE解释有助于C++语法的吸收。@ Pubby一定是在开玩笑。好的文档是你从不看代码的时候。您阅读标题中的解释注释,甚至不关心实现中的内容,也就是说,您不关心代码样式、格式、可读性等等——这是一个很好的文档。Doxygen只是一个从源代码(理想情况下是从标题)中提取这些文档的工具。当然,如果您想像一堆«targetzipped»标题而不是html/pdf/任何东西一样分发API描述,那么祝您好运;我更喜欢使用DoXEGEN。在C++中,“元功能”通常指的是一个代码,如OP。是的,它是一个typedef,但是typedef包含的类型是计算指定的编译时“函数”的结果。形式上,类没有返回值,但是逻辑上,
type
typedef是一个返回值。与单独的成员相比,在类的主文档体中记录会更好。可以说这里有一个返回,从同样的意义上说,这个结构定义是一个函数。但从Doxygen和相关/兼容的文档生成器的角度来看,尝试在示例中的任何内容上标记
@return
只会混淆它@david的示例typedef文档提供了此功能,并且是明确的,但可以通过结构本身的简要文档进行补充。这实际上应该被选为正确答案Doxygen文档中指向
tparam
的最新链接:我同意,大多数boost文档都非常好,遵循他们的方法当然是有意义的。这里的信息非常好。到Clang/LLVM文档检查的链接非常有用!我只能使用
-Wdocumentation
来让它工作。虽然.Re“作为一个例子,GNU STL(libstdc++)使用doxygen,但在STL中记录元编程的工作做得很差。”GNU在记录元编程方面做得很差,句号。看看源代码。现有的小评论充其量也很糟糕。用GNU糟糕的评论作为doxygen失败的例子是不公平的。一个更好的例子是一些非Thele的评论良好的源代码