说明:
限定符包括:::,.,->
一、当类型名称具有以下性质是,就应该在该名称前面添加template前缀:
1.名称出现在一个模板中
2.名称是受限的
3.名称不是用于指定基类继承的列表中,也不是位于引入构造函数的成员初始化列表中
4.名称依赖于模板
而且,只有当前面三个条件同时满足时才能使用前缀template,例如:
template
struct S:X
:Base{
S():X
::Base(typename X
::Base(0)){}
X
f(){//不能使用template
template X
::C *p;//指针p的声明
X
::D *q;//乘积
}
typename X
::C * s;//可有可无,因为不符合第四条规定
};
struct U{
X
::C * pc;//不能使用template,因为它并不是在模板中使用,U不是模板
};
二、如果一个模板名称是依赖型名称,需要在该名称前插入template关键字
例如:
template
class Weird{
public:
void casel(template Shell
::template In
::template Deep
* p){
}
}
编辑特别推荐: