boost提供了any_cast<>,于是你可以这样写: int j=any_cast<int>(anyVal); 事实上,any_cast的代码是这样的: template<typename ValueType> ValueType any_cast(const any & operand) { // 调用any_cast针对指针的版本。 const ValueType * result =any_cast<ValueType>(&operand); // 如果cast失败,即实...
any是一个类,只能通过any_cast<>获得any的实际内部值,而不能像auto定义的对象那样直接使用它。 any也可以用来存储任意类型元素,如int、double、string、vector或自定义类型。它能够存储任意类型的原因是其构造函数和赋值函数opeartor=是模板函数,可以接收任意类型。any不是一个模板类,所以定义元素的时候不必使用<>,如...
那么要实现any,any本身不是类模板,所以要接受任何参数,那么其构造函数必须是函数模板,但是函数模板不能导出推导后的类型,那么需要靠类模板来保存类型信息。 1structany 2{ 3template<typename _U> 4any(const_U&c) 5{} 6}; 可以看出,上面的any定义可以接受任何类型的参数,比如 any t1(1); any t2(1.0); ...
以下是一个示例代码,展示了如何将boost::any打印到流中: 代码语言:cpp 复制 #include<iostream>#include<boost/any.hpp>#include<boost/lexical_cast.hpp>intmain(){boost::any any_value=42;// 将boost::any转换为字符串std::string str_value=boost::lexical_cast<std::string>(boost::any_cast<int>(...
//摘自”boost/any.hpp” class any { public: class placeholder //泛型数据容器holder的非泛型基类 { public: // structors virtual ~placeholder() //虚析构函数,为保证派生类对象能用基类指针析构 {} public: // queries virtual const std::type_info & type() const = 0; //提供关于型别的信息 ...
boost::any resolver = it->second; auto f = boost::any_cast<std::function<T *(Args...)>>(resolver); return f(args...); } private: std::unordered_map<std::string, boost::any>map_; }; struct base { virtual ~base() = default; ...
any_cast: 用于对any对象进行安全访问,如果类型转换失败则会抛出异常: bad_any_cast.anyobj=10;int...
需要的时候,我们又可以使用any_cast将原来的数据还原: inti = boost::any_cast<int>(ai); string s = boost::any_cast<string>(as); 1. 2. 当这种转换发生类型不匹配时,会有异常bad_any_cast发生: try { inti = boost::any_cast<int>(as); ...
boost::any 该结构只能容纳一个元素,但是这个元素可以是任意类型(int、float、string、stl容器、任何自定义类型)。 常用函数 anycast<>() //any a(10); int n=any_cast<int>(a); boost::variant 该结构是枚举类型,但其元素可以string、vector等复杂类型;与any的区别,variant是有界类型,元素类型范围由用户指定...
value=boost::any_cast<T>(var); returntrue; } catch(constboost::bad_any_cast&) { returnfalse; } #else value=boost::get<T>(var); #endif returntrue; } template<typename T> inline T fromVariant(constAcVariant&var) { #ifdef _USE_ANY ...