当前位置: 首页 > news >正文

大冶seo网站优化排名推荐电子商务公司设计网站建设

大冶seo网站优化排名推荐,电子商务公司设计网站建设,sae 网站模板,参考消息电子版报纸本文初发于 “天目中云的小站”#xff0c;同步转载于此。 条款45 : 运用成员函数模板接受所有兼容类型 本条款中我们将会以智能指针为例, 介绍如何通过成员函数模板使一个模板类可以接受所有兼容类型. 我们先来构建一个简单的继承体系 : class Top { ... }; class Middle: p… 本文初发于 “天目中云的小站”同步转载于此。 条款45 : 运用成员函数模板接受所有兼容类型 本条款中我们将会以智能指针为例, 介绍如何通过成员函数模板使一个模板类可以接受所有兼容类型. 我们先来构建一个简单的继承体系 : class Top { ... }; class Middle: public Top { ... }; class Bottom: public Middle { ... }; Top *pt1 new Middle; // Middle*隐式转换为Top* Top *pt2 new Bottom; // Bottom*隐式转换为Top* const Top *pct2 pt1; // Top*隐式转换为const Top*在本例中, Top是最初始的基类, 依次派生出Middle和Bottom, 通过隐式转换, 各种指针类型是可以合理地进行隐式转换的. 但当我们想用智能指针代行管理事务时, 再想这样的转换就比较麻烦了, 当然标准库中的智能指针已经解决了这种问题, 我们现在要讨论的就是标准库是如何实现智能指针之间的隐式转换的, 我们期待的效果如下 : templatetypename T class SmartPtr { public: explicit SmartPtr(T *realPtr); // 通过资源指针进行初始化... };SmartPtrTop pt1 SmartPtrMiddle(new Middle); SmartPtrTop pt2 SmartPtrBottom(new Bottom); SmartPtrconst Top pct2 pt1; 这段代码是无法通过编译的, 因为就算是Top和Middle有联系, SmartPtrTop和SmartPtrMiddle也没有任何联系, 它们是无法隐式转换的, 但是我们可以通过成员函数模板, 具体说是写一个泛化copy构造函数来创造这种联系. 泛化copy构造函数 我们先来写一个成员函数模板中的泛化copy构造函数 : templatetypename T class SmartPtr { public:templatetypename U // 泛化copy构造函数SmartPtr(const SmartPtrU other); ... };这个模板函数接受用一个SmartPtrU类型的参数去构造一个SmartPtrT类型的对象, 现在还只是声明, 我们应该考虑如何定义内部逻辑, 正常逻辑应该是先看U*是否可以隐式转换为T*, 如果可以转换也就可以进行智能指针之间的转换, 我们来看代码 : templatetypename T class SmartPtr { public:templatetypename USmartPtr(const SmartPtrU other) : heldPtr(other.get()) {...} // 关键代码T* get() const { return heldPtr; }... private: T *heldPtr; };这里直接将参数other中的heldPtr取出, 赋值给当前对象的heldPtr. 其实在这里就进行了检查 : other.get()取出的指针类型为U*, 如果U*可以隐式转换为T*, 那么可以进行智能指针之间的转换.如果不可以隐式转换, 编译错误, 会被系统拦截. 至此, 通过泛化copy构造函数这个成员函数模板, 只要U*可以隐式转换为T*, 那么SmartPtrU也可以隐式转换为SmartPtrT. 成员函数模板 成员函数模板的效用不只局限于构造函数, 也可以支持赋值操作, 其不改变语言规则, 但是可以帮助你让class在构造和赋值操作上可以兼容更多类型, 让我们在使用模板类型时可以像使用非模板类型时一样自然流畅. 我们可以了解一下标准库中shared_ptr的简略版本, 看看其对成员函数模板的使用 : templateclass T class shared_ptr { public:// 构造templateclass Y explicit shared_ptr(Y * p); // 泛化构造函数templateclass Y shared_ptr(shared_ptrY const r); // 泛化copy构造函数templateclass Y explicit shared_ptr(weak_ptrY const r); // 通过weak_ptr构造templateclass Yexplicit shared_ptr(unique_ptrY r); // 通过unique_ptr构造// 赋值templateclass Y shared_ptr operator(shared_ptrY const r); // 泛化赋值重载templateclass Y shared_ptr operator(unique_ptrY r); // 用unique_ptr赋值... };在本例中, 构造函数中只有泛化copy构造函数没有explicit, 说明其他构造函数都不应当支持隐式类型转换, 也就是说T和Y的类型应当一致. 另外成员模板函数并不改变语言规则, 就算我们写了泛化的拷贝构造函数和赋值重载, 依旧不影响普通的拷贝构造和赋值重载, 如果我们没有写, 编译器还是会自动生成, 所以如果想要控制构造的方方面面, 我们应当同时声明普通版本和泛化版本. templateclass T class shared_ptr { public:shared_ptr(shared_ptr const r); // 普通拷贝构造templateclass Y shared_ptr(shared_ptrY const r); // 泛化拷贝构造shared_ptr operator(shared_ptr const r); // 普通赋值重载templateclass Y shared_ptr operator(shared_ptrY const r); // 泛化赋值重载... };请记住 : 使用成员函数模板可以生成可接受所有兼容类型的函数.当我们声明泛化拷贝构造和赋值重载时, 也应该声明其普通版本.
http://www.w-s-a.com/news/921701/

相关文章:

  • 规模以上工业企业的标准北京seo结算
  • 软件开发过程模型如何做网站性能优化
  • 网站建站公司广州南京江北新区楼盘
  • 哪些做展架图的网站好开发公司2022年工作计划
  • 磨床 东莞网站建设wordpress下载类主题系统主题
  • 免费学编程网站芜湖做网站都有哪些
  • 能发外链的网站门户网站网页设计规范
  • 网站建设所需人力南城区网站建设公司
  • 网站做图尺寸大小手机模板网站模板下载网站有哪些内容
  • 德阳市建设管理一体化平台网站做美食网站
  • 怎么做自己的推广网站2024年瘟疫大爆发
  • vps正常网站打不开linux网站建设
  • 福州网站快速排名在一个网站的各虚拟目录中默认文档的文件名要相同
  • 网站开发 流程图网站开发用哪个linux
  • 怎么用自己电脑做服务器发布网站吗seo门户网价格是多少钱
  • 备案网站可以做影视站网站400
  • 四川住房与城乡建设部网站注册登记
  • 网站建设第三方沈阳工程最新动态
  • 兰州做网站客户上海企业在线登记
  • 新乡公司做网站wordpress被大量注册
  • 小语种服务网站公众号平台建设网站
  • 免费做mc皮肤网站企业网站建设合同模板
  • 做网站可以申请个体户么网站的定位分析
  • jsp做的零食网站下载wordpress侧边栏折叠
  • 帝国网站单页做301南京旅游网站建设公司
  • 网站sem优化怎么做网站建设推广安徽
  • 比较好的室内设计网站潍坊网络科技
  • 南宁网站建设公设计联盟网站
  • 多个图表统计的网站怎么做百度推广费2800元每年都有吗
  • 连江县住房和城乡建设局网站企业类网站模版