当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

C++箴言:用成员函数模板承受兼容范例[VC/C++编程]

赞助商链接



  本文“C++箴言:用成员函数模板承受兼容范例[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

smart pointers(智能指针)是行为很像指针但是增添了指针没有供应的功效的 objects.比方,《C++箴言:利用对象管理资源》阐述了尺度 auto_ptr 和 tr1::shared_ptr 是怎样被利用于在得当的时间自动删除的 heap-based resources(基于堆的资源)的.STL containers 内的 iterators(迭代器)几近始终是 smart pointers(智能指针);你绝对不能期望用 "++" 将一个 built-in pointer(内建指针)从一个 linked list(线性链表)的一个节点移动到下一个,但是 list::iterators 可以做到.

real pointers(真正的指针)做得很好的一件事是支持 implicit conversions(隐式转换).derived class pointers(派生类指针)隐式转换到 base class pointers(基类指针),pointers to non-const objects(指向十份量对象的指针)转换到 pointers to const objects(指向常量对象的指针),等等.比方,考虑在一个 three-level hierarchy(三层担当体系)中能发生的一些转换:

class Top { ... };
class Middle: public Top { ... };
class Bottom: public Middle { ... };
Top *pt1 = new Middle; // convert Middle* => Top*
Top *pt2 = new Bottom; // convert Bottom* => Top*
const Top *pct2 = pt1; // convert Top* => const Top*

在 user-defined smart pointer classes(用户定义智能指针类)中模拟这些转换是需求本领的.我们要让下面的代码可以编译:

template<typename T>
class SmartPtr {
 public: // smart pointers are typically
  explicit SmartPtr(T *realPtr); // initialized by built-in pointers
 ...
};
SmartPtr<Top> pt1 = // convert SmartPtr<Middle> =>
SmartPtr<Middle>(new Middle); // SmartPtr<Top>
SmartPtr<Top> pt2 = // convert SmartPtr<Bottom> =>
SmartPtr<Bottom>(new Bottom); // SmartPtr<Top>
SmartPtr<const Top> pct2 = pt1; // convert SmartPtr<Top> =>
// SmartPtr<const Top>

在同一个 template(模板)的差别 instantiations(实例化)之间没有 inherent relationship(担当关系),所以编译器认为 SmartPtr<Middle> 和 SmartPtr<Top> 是完好差别的 classes,并不比(比方说)vector<float> 和 Widget 的关系更近.为了得到我们想要的在 SmartPtr classes 之间的转换,我们必须显式地为它们编程.


  以上是“C++箴言:用成员函数模板承受兼容范例[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: 与您的QQ/BBS好友分享!
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .