template<class T>
class Ptr
{
public:
typedef T Emp;
void insert(Emp a){
value += a;
}
void show()
{
std::cout<<"the result is "<<value<<"\n";
}
Ptr():value( T()){}
private:
Emp value;
};
template<class T>
void fill(T &c, T::Emp a[],int len) {
for ( int i = 0; i < len; ++i)
c.insert(a[i]);
}
在fill 模板上下文中,编译器没有足够的信息来决定嵌套的名字 Emp到底是一类型名字,还是一个非类型的名字。
C++ 标准约定,在这种情形下,嵌套的名字被假定为一个非类型的名字。
以下加上typename 显示说明T 为一个类类型
template<class T>
void fill(T &c, typename T::Emp a[],int len) {
for ( int i = 0; i < len; ++i)
c.insert(a[i]);
}