C++Primer学习笔记第十六章(16/18)类 模型与泛型编程

模板形参

模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明,。类型形参跟在关键字 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++,object,Class,编译器)