C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参
生活随笔
收集整理的这篇文章主要介绍了
C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1. 类型参数可以使用任何名字(通常命名为 T)
template <typename Foo> Foo calc (const Foo& a, const Foo& b){Foo tmp = a; / / tmp 的类型与参数和返回类型一样//...return tmp; // 返回类型和参数类型一样 }1.1 模板参数与作用域
一个模板参数名的可用范围:声明之后, 至模板声明或定义结束之前。
- 与任何其他名字一样, 模板参数会隐藏外层作用域中声明的相同名字。
- 一个模板参数名在一个特定模板参数列表中只能出现一次(与大多数其他上下文不同, 在模板内不能重用模板参数名)
1.2 模板声明
模板声明必须包含模板参数
/ / 声明但不定义 compare 和 Blob template <typename T> int compare (const T &, const T & ); template <typename T> class Blob;- 与函数参数相同, 声明中的模板参数的名字不必与定义中相同,但必须有相同数量和种类( 即, 类型或非类型) 的参数。
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 模板和泛型编程)模板实参的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha