`
soulwzy
  • 浏览: 15716 次
  • 性别: 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
分享到:
评论

相关推荐

    深入实践Boost:Boost程序库开发的94个秘笈

    《深入实践Boost:Boost程序库开发的94个...总之,《深入实践Boost:Boost程序库开发的94个秘笈》是 C++ 开发者深入学习 Boost 库的宝贵资源,无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的编程技能。

    Boost程序库完全开发指南

    - **软件设计模式**:Boost库包含如`boost::any`、`boost::scoped_ptr`等设计模式的实现,简化了代码结构。 - **模板元编程**:通过`boost::mpl`,可以在编译时进行复杂的计算,优化代码性能。 - **网络编程**:`...

    Boost C++ Application Development Cookbook - Second Edition - 2017.pdf

    - **多态与类型安全**:通过`boost::variant`和`boost::any`等工具增强代码的灵活性与安全性。 ##### 3. 高级特性 - **元编程**:探索Boost.MPL和Boost.StaticAssert等元编程工具,实现更高级别的抽象和编译时计算...

    Boost库学习指南与使用说明

    3. **泛型指针类any**:研究`boost::any`如何支持不同类型值的存储。 4. **增强的std::pair——TupleTypes**:了解`boost::tuple`如何提供比`std::pair`更强大、更灵活的元组类型。 #### 五、总结 通过本文的学习...

    超越C++标准库:Boost库导论

    10. **Boost.Any**:允许在运行时存储任意类型的数据,提高了代码的灵活性。 ### 特点与优势 Boost库的诸多特点使其成为C++程序员不可或缺的工具箱: - **高度可移植性**:Boost库支持多种编译器和操作系统,确保...

    Boost 库入门.chm.zip

    学习Boost库不仅能够提升编程技能,还能提高代码质量,因为Boost库的组件都是经过严格测试和优化的。在阅读“Boost库入门.chm”文档时,应着重理解每个库的用途,熟悉其基本用法,并通过实践来巩固知识。此外,还...

    C++11/14高级编程 Boost程序库探秘 中文版 第三版 高清完整

    7. **Boost.Any** 和 **Boost_variant**:存储任意类型数据的容器,增强了代码的灵活性。 通过学习这本书,读者不仅可以掌握C++11和C++14的现代编程技巧,还能深入了解Boost库的应用,提高编程效率,编写出更高效、...

    Boost库学习指南.pdf

    - **泛型指针(any)**:讲解了如何利用Boost.Any来存储不同类型的对象,并讨论了其内部实现机制。 - **TupleTypes**:介绍了一种增强版的`std::pair`类型——`TupleTypes`,以及它如何提供更灵活的数据结构支持。 综...

    boost程序库导论

    Boost库是C++社区中一个非常重要的开源项目集合,它提供了一系列经过广泛测试且高质量的库,旨在帮助开发者更好地编写C++程序。Boost库不仅包含了基本的数据结构和算法实现,还涉及到了更高级的主题如泛型编程和模板...

    超越C++标准库-boost程序库导论

    Boost库是一组免费且高质量的C++源代码库集合,旨在补充和完善C++标准库的功能,提供更加灵活、高效且易于使用的工具。Boost不仅帮助开发者解决实际问题,还促进了C++语言的发展,许多Boost库中的特性已经被纳入到...

    boost中文手册.rar

    入门手册通常会介绍Boost的基本概念和安装步骤,让初学者了解如何在项目中引入Boost。这部分可能会讲解如何配置环境,如何编译和链接Boost库,以及如何开始使用一些基础的Boost组件,例如智能指针(shared_ptr、...

    BOOST学习指南

    Boost库是C++标准化进程中的一个关键力量,提供了许多实用的、经过充分测试的技术,填补了标准库中的一些空缺。 在使用Boost之前,了解其基础架构和特性是很有必要的。首先,Boost库的一个显著特点是其可移植性,这...

    boost_1_37_0 中文学习文档

    "boost_1_37_0 中文学习文档"是针对这个特定版本的Boost库的一份详尽的中文文档,对于初学者来说,是一个极好的学习资源。 Boost库的核心理念是提供可直接纳入C++标准的组件,因此它的设计和实现都遵循了C++的标准...

    boost概览 pdf

    ### Boost库概览 Boost库,作为C++标准库(STL)的有力补充,旨在增强C++语言的功能性与实用性。...无论是初学者还是高级程序员,都能从Boost库中找到适合自己的工具,从而更轻松地完成复杂的编程任务。

    Functional Programming with C++.pdf

    《C++中的函数式编程》是一本探讨如何在C++中应用函数式编程范式的书籍。这本书详细介绍了函数式编程的...由于该书内容丰富且具有指导性,它不仅适合初学者入门,也适合有经验的程序员深入了解和掌握C++的高级特性。

Global site tag (gtag.js) - Google Analytics