用法:
1 他与c语言中的union相对应
2 通过模板参数定义可以支持的类型
3 通过boost::get<T>()进行访问
4 可通过boost::static_visitor与boost::apply_visitor(visitor, variant).的组合来访问
总结,目前还没想到这个有什么很好的用处;
看例子体会用法:
class print_visitor : public boost::static_visitor<void> {
public:
void operator()(int i) const {
std::cout << "It's an int: " << i << '\n';
}
void operator()(std::string s) const {
std::cout << "It's a std::string: " << s << '\n';
}
void operator()(double d) const {
std::cout << "It's a double: " << d << '\n';
}
};
int main() {
boost::variant<int,std::string,double,char>
my_first_variant("Hello there!");
print_visitor v;
boost::apply_visitor(v,my_first_variant);
my_first_variant=12;
boost::apply_visitor(v,my_first_variant);
my_first_variant=1.1;
boost::apply_visitor(v,my_first_variant);
my_first_variant='a';
boost::apply_visitor(v,my_first_variant);
}
还有:
boost::variant<int,std::string,double> my_first_variant;
my_first_variant=24;
my_first_variant=2.52;
my_first_variant="Fabulous!";
my_first_variant=0;
assert(boost::get<int>(my_first_variant)==0);