`
soulwzy
  • 浏览: 15015 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

初学boost::any的测试代码

c++ 
阅读更多
#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";  
     }

}
0
5
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics