我开始了解boost :: variant。我认为这个例子应该有用。
#include <boost/fusion/sequence.hpp>
#include <boost/fusion/include/sequence.hpp>
#include <boost/variant/variant.hpp>
#include <string>
#include <vector>
#include <iostream>
#include <boost/variant/get.hpp>
boost::variant< bool,long,double,std::string,
std::vector<boost::variant<bool> > > v4;
void main()
{
std::vector<boost::variant<bool> > av (1);
v4= av;
try
{
bool b=
boost::get<bool> (v4[0]); // <--- this is line 20
std::cout << b;
}
catch (boost::bad_get v)
{
std::cout << "bad get" <<std::endl;
}
}
我收到编译错误:
d:\ m \ upp \ boosttest \ main.cpp(20):错误C2676:二进制'[':'boost :: variant'做 es不定义此运算符或转换为预定义运算符可接受的类型 同 [ T0_ =布尔, T1 =长, T2 =双, T3 =的std :: string, T4 =标准::矢量&GT; ]
答案 0 :(得分:10)
v4[0]
无效,因为v4是变体,而不是矢量。您需要先使用boost::get
检索存储在其中的向量。所以,第20行应该是
boost::get<bool>(boost::get<std::vector<boost::variant<bool> > >(v4)[0]);