template <typename T>
class DD:Base<T>{
public:
void f(){
basefield = 0;//problem
}
};
template<>
class Base<bool>{
public:
enum { basefield = 42 };//tricky
};
void g(DD<bool>& d){
d.f();//opps
}
//修改方案一
template <typename T>
class DD1:Base<T>{
public:
void f(){
this->basefield=0;//查找被延迟了
}
};
//修改方案二
template <typename T>
class DD2:Base<T>{
public:
void f(){
Base<T>::basefield=0;//查找被延迟了
}
};
如果使用修改方案二,如果原来的非受限非依赖型名称是被用于虚函数调用的话,那么引入依赖性的限定的话,那么这种引入依赖性的限定将会近之虚函数调用,从而也会改变程序的含义,当遇到第二种情况不适合的情况,可以采用方案一