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]);}