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]);
}
本文探讨了C++中模板函数使用时typename关键字的重要性,特别是在处理嵌套类型时如何避免歧义。通过示例解释了当编译器无法确定嵌套名字是指类型还是非类型时,使用typename进行明确指定的方法。
720

被折叠的 条评论
为什么被折叠?



