Я использую библиотеку boost::variant
для хранения большого количества типов. Поскольку число типов растет, я скоро достигну предела в 20 типов. В документации кажется возможным определить вариант, используя mpl::vector
, который допускает более 20 типов (до 50, если я прав). Я попытался заменить свое определение варианта следующим образом:
#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
, так что, может быть, я что-то упустил - но не могу найти что! У меня все хорошо?
Заранее спасибо.