初学boost::any的测试代码_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 初学boost::any的测试代码

初学boost::any的测试代码

 2012/7/9 21:22:49  soulwzy  程序员俱乐部  我要评论(0)
  • 摘要:#include<iostream>#include<string>#include<utility>#include<vector>#include"boost/any.hpp"classA{public:voidsome_function(){std::cout<<"A::some_function()\n";}};classB{public:voidsome_function(){std::cout<<"B:
  • 标签:测试 代码
#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";  
     }

}
上一篇: c语言堆栈问题 下一篇: 学习C++的感触
发表评论
用户名: 匿名