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

6.1  Any库如何改进程序

●       对任意的类型提供类型安全(typesafe)的存储和安全的检索

●       提供了在标准库容器中存放异构类型(heterogeneous type)的方法

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

Any库提供一个类型:any,它允许对任意的类型进行存储,以便稍后进行检索,而且还不损失类型的安全性。它有点像是steroid的变体类型(variant type):它可以存放任意的类型,但是为了检索值必须知道它是什么类型。在很多情况下,我们可能希望在同一个容器中存储互不相关的类型。还有很多情况下,某些特定的代码仅仅关心从一点向另一点传递数据的方式,而不关心数据的类型。从表面上看,这些事情很容易做。它们可以通过一个诸如void*的无差别类型来实现。同样,它们还可以通过使用一个有差别的联合(discriminated union)来实现。另外,有许多变体类型都是通过一些类型标记机制来实现的。然而,所有这些实现方式都缺乏类型安全性,而且只有在最可控的情形下才有可能故意绕过类型系统。标准库的容器对它们所包含的类型进行了参数化,因此对在这些容器中存储异构类型的元素提出了一个看上去似乎不可能实现的挑战。幸运的是,解决的方案不一定必须使用void*,因为Any库允许存储不同类型的对象用于后续的检索。但是还是无法在不了解实际类型的情况下检索所存储的值,类型安全从而得到保证。

在设计框架时,不可能预先知道哪些类型要和框架类(framework class)一起使用。解决该问题的一个常见方法就是:要求框架的使用者遵守特定的接口,或者要求它们继承自框架所提供的基类。这是合理的,因为框架可能需要与不同的高级类进行通信才能使用。但是,也存在这样的情形,即框架对于所存储或接受的类型无须(或不能)知道任何相关信息。框架与其绕过类型系统去使用void*方法,还不如使用any类型。

查看所有评论(0)条】

最近评论



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