Abr*_*ile 7 c++ boost type-erasure
我正在阅读boost type erasure,我正在试图找出潜在的用途.我想读一些关于这个主题的文档(它看起来很大),我想练习一下.引用最多的应用程序区域是在客户端和服务器之间联网/交换数据.你可以建议一些其他的例子或练习,我可以玩这个图书馆吗?
Ali*_*ice 19
类型擦除在非常多的情况下非常有用,它实际上可以被认为是一种基本缺失的语言特性,可以桥接通用和面向对象的编程风格.
当我们用C++定义一个类时,我们真正定义的是非常具体type和非常具体的interface,并且这两个事物不一定需要相关.A type处理数据,interface处理对数据的转换.通用代码,例如在STL中,并不关心type,它关心interface:您可以使用任何容器或容器类序列进行排序std::sort,只要它提供比较和迭代器interface.
不幸的是,C++中的通用代码需要编译时多态性:templates.这对于在运行时之前无法知道的事情或需要统一接口的事情没有帮助.
一个简单的例子是:如何在一个容器中存储许多不同的类型?最简单的机制是将所有类型存储在void*中,或许可以使用某些类型信息来区分它们.另一种方法是识别所有这些types都有相同的interface:检索.如果我们可以创建一个单独的接口retrieval,然后为每种类型专门化它,那么它就好像type已经擦除了一部分.
any_iterator这是另一个非常有用的理由:如果你需要使用相同的接口迭代许多不同的容器,你需要从迭代器中删除type容器type.boost :: any_range是对此的一种微妙的增强,将它从迭代器扩展到范围,但基本思想是相同的.
简而言之,任何时候你需要从types一个类似于interface一个单一type的多个interface,你需要某种形式的类型擦除.运行时技术等同于编译时模板.
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |