4
我正在使用库boost::variant
来存储大量的类型。随着类型数量的增长,我很快会达到20种类型的限制。在文档中,似乎可以使用mpl::vector
来定义变体,该变体允许超过20种类型(如果我是正确的,则最多为50个)。我试图替换我的变体定义是这样的:使用mpl :: vector来定义boost :: variant类型
#include <boost/variant.hpp>
#include <boost/mpl/vector.hpp>
typedef boost::mpl::vector<
float,
math::float2,
math::float3,
relative_point<1>,
relative_point<2>,
relative_point<3>,
std::string,
color,
group,
dictionnary,
reference,
line,
strip,
text,
font
> variant_mpl_vec;
typedef boost::make_variant_over<variant_mpl_vec>::type data_type;
// This is the old definition
/*typedef boost::variant<
float,
math::float2,
math::float3,
relative_point<1>,
relative_point<2>,
relative_point<3>,
std::string,
color,
group,
dictionnary,
reference,
line,
strip,
text,
font
> data_type;*/
我直接把我的代码。大多数类型都是包含非常少数据的结构。
编译时,我得到了一个奇怪:
error: no matching function for call to ‘boost::detail::variant::make_initializer_node::apply<boost::mpl::pair< ... and lots more ...
上变型 - 定义是工作的罚款,所以我很惊讶我的更换不起作用。我是mpl
的新手,所以也许我错过了一些东西 - 但找不到什么!我做得好吗?
在此先感谢。
虽然与简化版本, 在问题的代码可以对 编译[ideone](HTTP:/ /ideone.com/Sgx02)。 这个[document](http://www.boost.org/doc/libs/1_47_0/doc/html/variant/tutorial.html#variant.tutorial.over-sequence) 说: 由于在几个编译器中的标准一致性问题,'make_variant_over' 并不是普遍可用的。在这些编译器中,库指示它的 缺少通过预处理符号定义的语法支持 'BOOS T_VARIANT_NO_TYPE_SEQUENCE_SUPPORT'._ 所以我建议检查'BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT'的值。 –
问题中的高级功能。看起来这不是一个问题,因为变体的定义,而是一个泛型函数,它将一个变体作为输入'boost :: variant'。这个函数将'T0'视为'boost :: detail :: variant :: over_sequence >',不明白为什么暂时。 –
neodelphi