typename

 typename有2个用处:

1.标识嵌套依赖类型。

2.在声明 template parameters(模板参数),与class作用相同。

 作用1:

例如:

template<typename C> // this is valid C++
void print2nd(const C& container)
{
	if (container.size() >= 2) {
	typename C::const_iterator iter(container.begin());
	...
	}
}

"typename must precede nested dependent type names"(“typename 必须前置于嵌套依赖类型名”)规则的例外是 typename 不必前置于在一个 list of base classes(基类列表)中的或者在一个 member initialization list(成员初始化列表)中作为一个 base classes identifier(基类标识符)的 nested dependent type name(嵌套依赖类型名)。

template<typename T>
class Derived: public Base<T>::Nested { 
 // base class list: typename not
 public: // allowed
  explicit Derived(int x)
  : Base<T>::Nested(x) // base class identifier in mem
  { 
   // init. list: typename not allowed
 
   typename Base<T>::Nested temp; // use of nested dependent type
   ... // name not in a base class list or
  } // as a base class identifier in a
  ... // mem. init. list: typename required
};


 

作用2:

template<class T> class Widget; // uses "class"
template<typename T> class Widget; // uses "typename"


 

参考网页:http://dev.yesky.com/13/2221013.shtml     C++箴言:理解typename的两个含义  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值