C++学习 boost学习之-Variant
2015-05-21 10:39
393 查看
用法:
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);
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);
相关文章推荐
- C++“准”标准库Boost学习指南-variant的使用
- C++“准”标准库Boost学习指南(7):Boost.Variant
- C++“准”标准库Boost学习指南-variant的使用
- C++ Boost 学习资源列表
- C++学习 boost学习之-numeric_cast
- C++学习 boost学习之-bind
- C++“准”标准库Boost学习指南(10):Boost.Lambda
- C++ boost 实例学习
- C++“准”标准库Boost学习指南(2):Boost.Conversion
- C++学习 boost学习之-intrusive_ptr
- 学习 Boost:bind/Boost::functions closure as delegate in C++
- C++学习 boost学习之-Thread
- C++学习 boost学习之-Tuples
- C++学习 boost学习之-weak_ptr
- 一起学习C,C++__boost,ace,qt--开始(2)
- C++著名程序库的比较和学习经验(STL.Boost.GUI.XML.网络等等)
- C++“准”标准库Boost学习指南(3):Boost.Utility
- C++“准”标准库Boost学习指南(8):Boost.Tuple
- boost c++ lib on linux(4) - thread同步条件变量学习——生产者消费者队列
- C++著名程序库的比较和学习经验(STL.Boost.GUI.XML.网络等等)