栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【Effective C++ 条款41-45 笔记】【template隐式接口和编译期多态】【typename的双重意义】【处理模板化基类中的名称】【使用成员函数模板接受所有兼容类型】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Effective C++ 条款41-45 笔记】【template隐式接口和编译期多态】【typename的双重意义】【处理模板化基类中的名称】【使用成员函数模板接受所有兼容类型】

条款41:template的隐式接口和编译期多态

对于class来说是:显式接口、运行期多态

  • 显式接口:由函数签名式(函数名称、参数类型、返回值类型)组成

  • 运行期多态:根据运行期对象的实际类型决定调用哪个函数

对于template来说就是:隐式接口、编译期多态

  • 隐式接口:不基于函数签名式,而是由有效表达式组成
  • 编译期多态:以不同的template参数具现化函数模板会导致调用不一样的函数

编译期多态与运行期多态的区别,类似于:”哪一个重载函数该被调用(发生在编译期)“和”哪一个virtual函数应该被绑定(发生在运行期)“之间的差异

条款42:了解typename的双重意义

第一重:在声明template类型参数的时候,class和typename没有差别

template class A;
template class B;

第二重:如果模板内出现的某个名称依赖于某个模板参数,称之为从属名称,如果从属名称在class内呈现嵌套状,称之为嵌套从属名称(如 T::变量名称 或 T::方法名称);在使用嵌套从属名称的时候,要在前面加上typename

有两种例外情况:

  1. typename不能出现在类继承列表中
  2. 也不能出现在成员初始化列表中
条款43:处理模板化基类中的名称

可在子类模板中通过this->找到积累模板中的成员名称;或者使用using声明基类的成员名称

条款45:使用成员函数模板接受所有兼容类型

泛化copy构造函数:这一类构造函数根据对象u创建对象t,而u和t的类型是同一个模板的不同具现体

泛化copy构造函数不用声明为explicit,因为原始指针类型之间的转换(例如从子类指针转换为基类指针)是隐式转换,不用写明转型动作(cast)

  • 使用成员函数模板生成“可接受所有兼容类型”的函数
  • 如果声明成员模板用于泛化copy构造函数和泛化赋值运算符,还是需要正常的copy构造函数和copy赋值操作符
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号