设为首页 加入收藏

TOP

19.8.8 interface_cast 尾声
2013-10-07 15:07:10 来源: 作者: 【 】 浏览:84
Tags:19.8.8 interface_cast 尾声

19.8.8  interface_cast 尾声

你可能会抱怨,怎么这么多COM!呃……我当然愿意给出一些非面向技术的例子,但那样的话我就很难给出一些有意义的东西。 我们已经令接口查询变得类型安全、简洁紧凑,甚至拥有了基于策略(policy-based)的错误处理。那么,我们究竟失去了什么?

当然不是性能:所有的东西都是inline的,使用接口强制的代码跟不使用它们的代码相比并没有效率上的差别。但毋庸置疑,我们在健壮性方面获得了一个显著的提升:我们消除了QueryInterface()带来的复杂性和易错性。此外,我们还通过限制接口的某些使用(以及AddRef()和Release()方法),从而将引用计数误用的风险降至最低限度。

我们通过减少代码量以及使用强制语法来让代码变得更为清晰。从而代码的读者可以很清楚地看出你想查询的是什么,以及谁应该负责递增相应的引用计数。

另外,代码的可移植性也得到了改善,尽管还不够完美。如果在那些不支持__uuidof()扩展的编译器上使用自定义接口,人们就必须提供一个IID_traits特化。这里的关键在于,尽管使用该扩展能够让我们更容易地使用接口强制,但该扩展并不是必需的,所以我们仍然拥有极好的可移植性。

代码的可维护性也得到了改善,因为代码的量减少了,在代码中引入错误的机会也就因此而降至了最低。

坦白地说,这些接口强制惟一遭到批评的地方就是它们的名字。我承认它们的名字确实不够简洁,但对于那些使用该强制或者维护使用了该强制的代码的人来说,二义性自然是越少越好。而当我们处理引用计数的时候,太少或太多引用都可能意味着严重的错误。因此,我选择了醒目但丑陋的命名约定。我还考虑过其他名字,但没有一个能够保留这些强制的无歧义性的语义,所以现在的名字就留下来了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇19.9 boost::polymorphic_cast 下一篇19.8.4 接口强制操作符的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: