利用 typename 消除歧义

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值