Note of Justin

关于工作和读书的笔记

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

积分与排名

  • 积分 - 50691
  • 排名 - 434

最新评论

阅读排行榜

评论排行榜

[原创文章欢迎转载,但请保留作者信息]
Justin 于 2009-12-09


Item15告诉我们这个世界是现实的,有人往左就有人往右。为了保证更多的人能用好你的代码,在使用对象管理资源的同时也要留出接口给那些需要绕过对象而直接访问资源的人。(我个人是不太情愿这样做……)
     
方法说起来是相当的简单:写个函数暴露出指向资源的指针就可以。书里讲得更多的是用怎样的函数:

可以实现一个get函数,或是*、->运算,返回指向资源的指针。这个叫做显式转换(explicit conversion)
也可以实现一个隐式的转换函数(implicit conversion),这里要抄一下完整的代码,仅仅因为我没有读过也没有写过这样的转换函数。但是个人觉得实际工作中应该是不提倡这样做的,因为隐式的转换极有可能发生在编程者没有意识的情况下,导致后面的代码出错。
class Font {
public:
//  ..
// implicit conversion function
  operator FontHandle() const { return f; }
//  ..
};

上面代码的应用如下,f本身为Font类型,(changeFontSize第一个参数为FontHandle),但是由于隐式转换,类型变成了FontHandle。
Font f(getFont());
int newFontSize;
//..
// implicitly convert Font to FontHandle
changeFontSize(f, newFontSize); 

回头看这个Item的重点:做人留一线,日后好相见。为了能兼容更多的API,大师认为需要留出接口提供对资源的直接访问。
posted on 2009-12-26 10:26 Justin.H 阅读(1158) 评论(0)  编辑 收藏 引用 所属分类: Effective C++ 炒冷饭

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理