模板成员:
模板类将另一个模板类和模板函数作为其成员
|
|
n 是基于int 类型的hold 对象,q 的基于T 类型的hold 对象,下述声明使得T表示的是double,因此q 的类型是 hold< double>:
blab() 方法的U 类型由该方法被调用时的参数决定,T 类型由对象的实例化决定,下述例子中,guy 的声明将T 类型设置为double,U 的类型则为int.
虽然混合类型所引起的自动类型转换导致blab() 函数中的计算以double 类型进行,但返回值的类型为U (即int),因此上述输被截断为28.
如果使用guy.blab()时,使用10.0代替10,那么U 的类型将会设置为double ,使得返回值也为double,因此输出为28.2608.
将模板类用作参数
模板类可以包含类型参数(如 typename T )和非类型参数(如 int ),还可以包含本身就是模板的参数.
举个书上的栗子:
|
|
如上, 上述模板参数类型为template < typename T> class Thing,其中Thing 为参数.
这意味着为了使 Crab< King> legs 被接受,模板类参数King 必须是个模板类:
legs 声明将用King< int> 替换 Thing< int> ,用 King< double> 替换 Thing< double>,但是在下面的代码中就有所不同.
在Crab 类中,有两行代码声明了两个类对象:
而mian 函数中包含以下声明,因此,Thing< int> 将被实例化为 Stack< int> ,而Thing< double>将被实例化为Stack< double>.
总之,模板参数Thing 将被替换为声明Crab 对象时被用作模板参数的模板类型.