typename 解决嵌套类型依赖问题

本文探讨了typename在C++模板编程中的关键作用,特别是在解决嵌套类型依赖问题上的应用。通过一个函数模板的例子,展示了typename如何告诉编译器T::iterator是一种类型,从而避免编译错误。通过使用typename,确保了模板在实例化时能够正确识别和处理相关类型。
摘要由CSDN通过智能技术生成

typename的使用场合有两种,第一种场合是在声明函数模板或者类模板的时候,如

template<typename T>             //template<class T>
class mylist
{
private:    
    T t;
}

但我个人的重点是第二种场合,解决嵌套类型依赖问题

下面就以一个函数模板为例,该函数模板输入类型是T,T为 vector 或者 list,我希望通过迭代器打印出第一个元素的内容

测试结果如何呢?我们发现编译出错,函数模板只有在被实例化的时候才知道 T 是什么类型,在编译阶段 无法获取到 T 的迭代器,因为此时编译器把 T::iterator 当作一个变量看待

模板是一张房屋设计图,房屋被建造出来了(实例化),才知道是不是有花园或者车库

为了解决这个问题,我们引入了 typename ,typename会告诉编译器,这是一种类型,这样的话,编译器就知道 T::iterator 是类型,而 it 是变量名,于是就允许编译通过了。下面我们修改一下然后测试

 测试结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值