如何制作以下 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 似乎是更好的选择。
关于c++ - 在逗号上使用多参数模板类型扼流圈的 Boost Fusion 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552794/