1. 类型参数可以使用任何名字(通常命名为 T)

template <typename Foo> Foo calc (const Foo& a, const Foo& b){Foo tmp = a; / / tmp 的类型与参数和返回类型一样//...return tmp; // 返回类型和参数类型一样
}

1.1 模板参数与作用域

一个模板参数名的可用范围:声明之后, 至模板声明或定义结束之前。

  • 与任何其他名字一样, 模板参数会隐藏外层作用域中声明的相同名字。
typedef double A;template <typename A, typename B> void f (A a, B b){/ / tmp 的类型为模板参数 A 的类型 , 而非 double/ / 错误: 重声明模板参数 BA tmp = a;double B;
}
  • 一个模板参数名在一个特定模板参数列表中只能出现一次(与大多数其他上下文不同, 在模板内不能重用模板参数名)
// 错误: 非法重用模板参数名 v
template〈typename V, typename V>//...

1.2 模板声明

模板声明必须包含模板参数

/ / 声明但不定义 compare 和 Blob
template <typename T> int compare (const T &, const T & );
template <typename T> class Blob;
  • 与函数参数相同, 声明中的模板参数的名字不必与定义中相同,但必须有相同数量和种类( 即, 类型或非类型) 的参数。
/**************3 个 calc 都指向相同的函数模板**************///模板的声明
template ctypename T> T calc (const T &, const T& ); / / 声明
template <typename U> U calc (const U&, const U& ); / / 声明//模板的定义
template <typename Type> Type calc (const Types a, const Types b) { / •" / }

1.3 使用类的类型成员

为了处理模板, 编译器必须知道名字是否表示一个类型。

例如, 假定 T 是一个类型参数的名字,语句有歧义: T::sizetype * p;

  • 一个名为 p 的变量?
  • 一个名为 SiZe_type 的 static 数据成员与名为 p 的变量相乘?

默认情况下, C++语言假定通过作用域运算符访问的名字不是类型。 因此, 如果我们希望使用一个模板类型参数的类型成员, 就必须显式告诉编译器该名字是一个类型。 我们通过使用关键字 typename 来实现这一点:


//top 函数期待一个容器类型的实参, 它使用 typename 指明其返回类型并在 c
//中没有元素时生成一个值初始化的元素( 参见 7.5.3 节, 第 262 页) 返回给调用者.template <typename T> typename T::value_type top (const T& c ) {if (!c.empty ( ) )return c.back ( ) ;elsereturn typename T::value_type ( );
}

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参相关推荐

  1. C++ Primer 学习笔记_75_模板与泛型编程 --模板定义

    模板与泛型编程 --模板定义 引言: 所谓泛型程序就是以独立于不论什么特定类型的方式编写代码.使用泛型程序时,我们须要提供详细程序实例所操作的类型或值. 模板是泛型编程的基础.使用模板时能够无须了解模 ...

  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化

    1. 场景 //第一个版本:可以比较任意两个类型 template <typename T> int compare (const T &, const T & );//第 ...

  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板

    1. 可变参数模板( variadic template) 一个接受可变数目参数的模板函数或模板类. 1.1 参数包 (parameter packet) 可变数目的参数被称为参数包,存在两种参数包: ...

  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板

    1. 定义 函数模板可以被另一个模板或一个普通非模板函数重载: 名字相同的函数必须具有不同数量或类型的参数 1.1 函数模板匹配因素 对于一个调用, 其候选函数包括所有模板实参推断成功的函数模板实例. ...

  5. C++ Primer 5th笔记(chap 16 模板和泛型编程)函数模板显式实参

    1. 返回类型不清楚的时候,尾置返回允许我们在参数列表之后声明返回类型 template ctypename It> ??? & fcn (It beg, It end) {// 处理序 ...

  6. C++ Primer 5th笔记(chap 16 模板和泛型编程)成员模板

    1. 成员模板( member template) 一个类( 无论是普通类还是类模板) 可以包含本身是模板的成员函数. 成员模板不能是虚函数. 1.1 普通( 非模板 ) 类的成员模板 / / 函数对 ...

  7. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化

    1. 默认情况下,一个类模板的成员函数只有当程序用到它时才进行实例化. (即使某种类型不能完全符合模板操作的要求(参见9.2节,第294页),我们仍然能用该类型实例化类todo). eg. //实例化 ...

  8. C++ Primer 5th笔记(chap 16 模板和泛型编程) 类模板的成员函数

    1. 分类 1.1 定义在类模板内的成员函数 被隐式声明为内联函数. 1.2. 类模板外部的成员函数, 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板 ...

  9. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板定义

    1. 定义 类似函数模板,类模板以关键字template开始,后跟模板参数列表.在类模板(及其成员)的定义中,我们将模板参数当作替身,代替使用模板时用户需要提供的类型或值: template < ...

  10. C++ Primer 5th笔记(chap 16 模板和泛型编程)类型无关和模板编译

    1. 编写类型无关的代码 泛型代码的两个重要原则: 模板中的函数参数是const的引用. 函数体中的条件判断仅使用<比较运算. 大多数类型,包括内置类型和我们已经用过的标准库类型(除unique ...

最新文章

  1. 微信小程序把玩(四十)animation API
  2. 3G,三足鼎立;花开千朵,各表一枝!!!
  3. TP5:验证器的封装——5
  4. 深度残差收缩网络:(一)背景知识
  5. [转]从java角度理解cpu上下切换
  6. SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常
  7. In the beginning, the world was void and without form…
  8. 60、剑指offer--把二叉树打印成多行
  9. C语言 —— 回调函数
  10. 较完整的 bean生命周期
  11. 【STM32F407的DSP教程】第17章 DSP功能函数-定点数互转
  12. 微软中国CEO梁念坚 : Windows Phone有四大优点
  13. 小白也能懂的 Python 入门指南(1)——Python 的前世今生
  14. html表格列宽度 比例,HTML表格的整体宽度,以及各列的宽度均可以由( )属性来控制。...
  15. 分布式事务解决方案汇总:2PC、3PC、消息中间件、TCC、状态机+重试+幂等(转)
  16. ssd hdd linux分区方案,windows10+ubuntu 16.04+双硬盘(SSD+HDD)分区(图文)
  17. 震撼来袭!剪映专业版出内测了!最新功能抢先使用!
  18. canvas与CreateJS实现图片动画
  19. 分布式优化算法的背景,应用场景,研究动态
  20. ClickHouse入门技术分享PPT之一

热门文章

  1. Java集合:Hashtable源码分析
  2. Android --- 199 198开头手机号正则表达式无效
  3. element ui 下拉列表验证无效的问题(通俗易懂)-实例讲解
  4. JPA-CascadeType四个属性的讲解
  5. python乘法模板_python – 使用矩阵乘法的numpy模板匹配
  6. mysql获取日期的月日_MySQL获取月,日的日期列表
  7. 大一java实训报告1500字_社会实践报告1500字
  8. 推动数据中心绿色转型(经济透视)
  9. 2019年备受关注的5个IT系统灾难恢复技术趋势
  10. Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略