effective C++条款四十二解读

了解typename的双重意义

1.template <class T>与template <typename T>没有区别。

typename 的另一种用法,我们以一个代码来解释:

template<typename C>
void print2nd(const C&container)
{
	if(container.size()>2)
	{
		C::const_iterator iter(container.begin());
		++iter;
		int value=*iter;
		std::cout<<value;
	}
}
C::const_iterator 的名称依赖于模板参数C,是从属于C的名称,同时带了::符号是一个从属嵌套名称,需要在前面加上typename

template<typename C>
void print2nd(const C&container)
{
	if(container.size()>2)
	{
		typename C::const_iterator iter(container.begin());
		++iter;
		int value=*iter;
		std::cout<<value;
	}
}
这样才能通过编译,不然C::const_iterator 完全可能是一个静态变量。

由于 C::const_iter太长我们经常会有这种用法 typedef typename C::const_iter const_iter.

另外注意不要把typename放在基类列表以及成员初始列之中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值