template学习之typename关键字

关键字 typename      
template <typename T>
class MyClass{
typename T::SubType * ptr;
};

在这里第二个typename关键字的意思是:SubType是class T内部定义的一个型别
从而ptr是一个指向T::SubType型别的指针;

如果上例没有使用关键字typename,SubType会被认为是class T的一个static成员
于是被编译器理解为一个具体变数或一个物件,导致下面式子:
T::SubType * ptr;
所表达的意义变成了:class T的static成员SubType与ptr相乘


通常与某个template parameter相关的名称是个型别时,就必须加上关键字typename
一般比较常见的是STL容器供应的迭代器
如下代码:

template <typename T>
void printcoll(T const  &coll){
	typename T::const_iterator pos;
	typename T::const_iterator end(coll.end());

	for(pos = coll.begin;pos!=end ; ++pos){
		std::cout<< *pos <<" ";
	}
	std::cout << std::endl;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值