首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

6.5  Any库小结

有差别类型可以包含不同类型的值,它与无差别类型(例如void*)有很大的差别。通常情况下,我们总是严重地依赖于C++中的类型安全,只有在极少数的情况下我们才希望没有类型安全。

这基于下述理由:类型安全可以防止犯错,并且能改善代码的性能。因此,应该避免使用无差别类型。但是,下述情况—— 发现自己需要异构存储、需要将使用者与类型的细节隔离、或者需要在较低的层次获得最大的灵活性—— 也不少见。any为这些功能提供了支持,同时还维持了完全的类型安全,从而使它成为我们的工具箱的极佳补充!

在以下几种情形中使用Any库:

●       需要在容器中存储异构类型的值时

●       需要存储未知类型时

●       传递类型所通过的层次无须了解任何有关该类型的信息时

Any库的设计同时也是一门很有价值的课程,即关于如何封装一个类型而又不影响到包含该类型的类。这种设计可以用于创建泛型函数对象、泛型迭代器等。它是一个展示封装的威力以及多态与模板相结合的例子。

在标准库中,有很多优秀的工具可以用来存放多个元素。当需要存储异构类型的元素时,常常希望避免使用新的集合类型。any类提供了一种解决方法,使得在大多数情况下可以与已有的容器一起使用。从某种程度上来讲,模板类any扩展了标准库容器的功能,它把完全不同的类型包装到一个同构的包装器(wrapper)中,从而这个包装器就可以将它们存储到前述容器中。

把Boost.Any库添加到已有代码中非常简单。它不需要修改设计,并且在应用后就可以立即增加灵活性。该库的接口非常小,因此是一个很容易理解的工具。

Any库由Kevlin Henney创建,与所有的Boost库一样,它由Boost社区修订、改进和强化。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论