设为首页 加入收藏

TOP

19.8.1 interface_cast_addref
2013-10-07 15:07:15 来源: 作者: 【 】 浏览:68
Tags:19.8.1 interface_cast_addref

19.8.1  interface_cast_addref

现在我们就来看一看其中之一,把刚才的例子重写如下:

  1. IImpC   *ic =  . . .;  
  2. IImpCpp *icpp = interface_cast_addref<IImpCpp*>(ic);  
  3. if(NULL != icpp)  
  4. {  
  5.   BOOL bOO;  
  6.   icpp->CanSupportOO(&bOO);  
  7.   icpp->Release(); // 释放接口  
  8. }  

由于接口标识和指向接口的指针都是与请求的接口的类型相关的,所以我们可以从接口类型中将它们推导出来。这样一来我们就可以把对QueryInterface()的调用以及跟它相关的那些繁琐而冗长的代码藏起来,这么一来前面描述的两个问题就不复存在了。接口强制如果成功的话就会返回一个非空指针,客户端代码持有该指针,如果不再需要使用该接口,就通过它来释放该接口。

这是一个好的开端,但余下来的代码仍然毫无改观,包括检查转换是否成功,以及当我们不再需要该接口的时候必须手工释放接口。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇19.8.2 interface_cast_noaddref 下一篇19.9 boost::polymorphic_cast

评论

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