导言
- Boost.any的特性
– 能够保存任意类型
的变量,这和STL有很大的不同;
– 模拟动态类型;
–类型安全
:不对存入any的变量进行类型强制转换;
– 异常安全;
– 可写出动态语言的编程范式。 - 构造函数
default构造函数, copy构造函数, move构造函数和operator=构造函数. - 成员函数
clear, empty, swap, type. - any_cast用于取any中的值
① boost::any_cast<Type>(anyObj);返回的不是引用而是一个副本对象;如果类型不匹配会抛出boos::bad_any_cast异常
② boost::any_cast<Type>(&anyObj);如果类型不匹配则返回nullptr,不会抛出异常。因此,在代码过程中,我们习惯使用传引用而非传值
- bad_any_cast:一个异常类型;使用any_cast类型不匹配时会被抛出异常。如果不想抛出异常而使得程序崩溃,可用try catch捕获;不过不建议这么做!
- 注意事项
– 需要RIIT支持
– 所有的对象都是copy
操作
– 不对存入数据做类型转换
– 动态分配内存
– any不是模板类
使用实例
以下是any的公有接口:
namespace boost {
class any {
public:
any();
any(const any&);
template<typename ValueType>
any(const ValueType&);
~any();
any& swap(any &);
any& operator=(const any&);
template<typename