C++学习 boost学习之-Variant

来源:互联网 发布:中国4g网络协会 编辑:程序博客网 时间:2024/05/21 09:00

用法:

1 他与c语言中的union相对应

2 通过模板参数定义可以支持的类型

3 通过boost::get<T>()进行访问

4 可通过boost::static_visitorboost::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);

0 0