c++ - 在逗号上使用多参数模板类型扼流圈的 Boost Fusion 结构

标签 c++ templates boost

如何制作以下 Boost Fusion 结构?

#include <array>
#include <boost/fusion/include/define_struct_inline.hpp>

BOOST_FUSION_DEFINE_STRUCT_INLINE(
  MyStruct,
  (std::array<int, 3>, foo)
)

编译失败(GCC 4.8.1 和 Boost 1.53)因为 std::array<int, 3>被解释为 2 个参数而不是 1 个。

请注意,我不是在询问上面显示的特殊情况(这只是一个示例)。这个特殊问题的简单解决方案是使用 typedef std::array<int, 3> Int3Array; .

我问的是使用带有逗号分隔的多个模板参数的类型作为 Boost Fusion 结构字段列表中的类型的一般问题。最终,我想使用模板 Boost Fusion 结构,我无法提前定义 typedef。例如,我可能想做这样的事情:

BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE(
  (A)(B)(C),
  MyAdvancedStruct,
  (A<B, C>, bar)
)

最佳答案

一个可行的解决方法是

BOOST_FUSION_DEFINE_STRUCT_INLINE(
  MyStruct,
  (decltype(std::array<int, 3>()), foo)
)

当然要使其/普遍/适用

BOOST_FUSION_DEFINE_STRUCT_INLINE(
MyStruct,
(boost::remove_reference<decltype(std::declval<std::array<int, 3>>())>::type, foo)
)

这似乎需要另一个宏...但是,等等 :) BOOST_PP_COMMA 似乎是更好的选择。

概念验证:http://coliru.stacked-crooked.com/a/f8b407b810fcfdc0

关于c++ - 在逗号上使用多参数模板类型扼流圈的 Boost Fusion 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552794/

相关文章:

c++ - 我如何验证给定类的每个实例都被应用程序终止破坏了?

c++ - 具有局部函数类型的 std::vector<T>

c++ - 在模板容器中存储元素

c++ - 关于 Copy-On-Write 和 shared_ptr 的困惑

vector 集合上的 C++ iterator_adapter

c++ - 使用 AlphaBlend() 和 FillRect()

c++ - 初始化列表作为 operator[] 的参数

C++嵌套模板参数查找失败

c++ - 需要帮助来理解我的字符串出错的地方

windows - CMakes 在 Windows 上找不到 boost (以及大多数其他东西)