C++Primer学习笔记第十六章(16/18)类 模型与泛型编程
2010-10-28 21:42
323 查看
模板形参
模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明,。类型形参跟在关键字 class 或 typename 之后定义,例如,class T 是名为 T 的类型形参,在这里 class 和 typename 没有区别。
模板形参遵循常规名字屏蔽规则
为什么定义了size_type这个东西
例如,标准库的容器类定义了不同的类型,如 size_type,使我们能够以独立于机器的方式使用容器。
避免在模板定义内部指定类型时出现的指代不明晰
template
<class Parm, class U>
Parm fcn(Parm* array, U value)
{
Parm::size_type * p; // If
Parm::size_type is a type, then a declaration
// If Parm::size_type
is an object, then multiplication
}
我们知道 size_type 必定是绑定到 Parm 的那个类型的成员,但我们不知道 size_type 是一个类型成员的名字还是一个数据成员的名字,默认情况下,编译器假定这样的名字指定数据成员,而不是类型。
如果希望编译器将 size_type 当作类型,则必须显式告诉编译器这样做:
template <class Parm, class U>
Parm fcn(Parm* array, U value)
{
typename Parm::size_type * p; // ok:
declares p to be a pointer
}
非类型模板形参
模板非类型形参是模板定义内部的常量值。
泛型句柄类
模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明,。类型形参跟在关键字 class 或 typename 之后定义,例如,class T 是名为 T 的类型形参,在这里 class 和 typename 没有区别。
模板形参遵循常规名字屏蔽规则
为什么定义了size_type这个东西
例如,标准库的容器类定义了不同的类型,如 size_type,使我们能够以独立于机器的方式使用容器。
避免在模板定义内部指定类型时出现的指代不明晰
template
<class Parm, class U>
Parm fcn(Parm* array, U value)
{
Parm::size_type * p; // If
Parm::size_type is a type, then a declaration
// If Parm::size_type
is an object, then multiplication
}
我们知道 size_type 必定是绑定到 Parm 的那个类型的成员,但我们不知道 size_type 是一个类型成员的名字还是一个数据成员的名字,默认情况下,编译器假定这样的名字指定数据成员,而不是类型。
如果希望编译器将 size_type 当作类型,则必须显式告诉编译器这样做:
template <class Parm, class U>
Parm fcn(Parm* array, U value)
{
typename Parm::size_type * p; // ok:
declares p to be a pointer
}
非类型模板形参
模板非类型形参是模板定义内部的常量值。
泛型句柄类
相关文章推荐
- C++Primer学习笔记第十六章(16/18)类 模型与泛型编程
- C++ Primer 学习笔记_79_模板与泛型编程 -模板编译模型
- C++Primer学习笔记第六章(6/18)语句
- c++primer第十六章模板和泛型编程小结-16
- C++primer第五版笔记-第十六章模板与泛型编程
- 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)
- 【C++ Primer】【学习笔记】【第十六章】模板与泛型编程之一:模板定义
- C++ Primer复习和学习笔记 第十六章 模板与泛型编程
- 《C++primer(第五版)》学习之路-第十六章:模板与泛型编程
- C++Primer学习笔记第八章(8/18)标准IO库
- Linux Kernel 学习笔记16:总线设备驱动模型
- C++ Primer 学习笔记_79_模板与泛型编程 --模板编译模型
- C++Primer学习笔记第五章(5/18)表达式
- 系统架构师学习笔记_第十六章_连载
- java学习笔记_单例模型
- Factorization Machines 学习笔记(二)模型方程
- OAF学习笔记-16-自定义异常的抛出
- C++primer学习笔记----智能指针
- 三维游戏图形学学习笔记(一)基本光照模型
- 学习笔记TF035:实现基于LSTM语言模型