初学boost::any的测试代码
#include <iostream>#include <string>#include <utility>#include <vector>#include "boost/any.hpp"class A {public: void some_function() { std::cout << "A::some_function()\n"; }};class B{public: void some_function() { std::cout << "B::some_function()\n"; }};void print_any(boost::any& a){ if (A* pA=boost::any_cast<A>(&a)) { pA->some_function(); } else if (B* pB=boost::any_cast<B>(&a)) { pB->some_function(); } else { try { std::cout << boost::any_cast<std::string>(a) << '\n'; } catch(boost::bad_any_cast&) { std::cout << "Oops!\n"; } }}int main() { std::cout << "Example of using any.\n\n"; std::vector<boost::any> store_anything; store_anything.push_back(A()); store_anything.push_back(B()); // 我们再来,再加一些别的东西 store_anything.push_back(std::string("This is fantastic! ")); store_anything.push_back(3); store_anything.push_back(std::make_pair(true, 7.92)); std::for_each(store_anything.begin(),store_anything.end(),print_any); std::cout << "Example of using any member functions\n\n"; boost::any a1(100); boost::any a2(std::string("200")); boost::any a3; std::cout << "a3 is "; if (!a3.empty()) { std::cout << "not empty\n "; } std::cout << "empty\n"; a1.swap(a2); try { std::string s=boost::any_cast<std::string>(a1); std::cout << "a1 contains a string: " << s << "\n"; } catch(boost::bad_any_cast& e) { std::cout << "I guess a1 doesn't contain a string!\n"; } if (int* p=boost::any_cast<int>(&a2)) { std::cout << "a2 seems to have swapped contents with a1: " << *p << "\n"; } else { std::cout << "Nope, no int in a2\n"; } if (typeid(int)==a2.type()) { std::cout << "a2's type_info equals the type_info of int\n"; }}
页:
[1]