C++ 模板class与typename的区别

模板中,class与typename的差别:

        在很多人看来,两者没有上门区别,但有的时候,必须使用typename,代码如下:

template<class T>
class MyIter
{
public:
 typedef T value_type;
 value_type *ptr;
 T& operator*()const{return *ptr;}
 MyIter(T *p=0):ptr(p){};
 //....
};

template<typename T1, typename T2>
typename T1::value_type Testfun(T1 &ct1, T2 &ct2)
{
 if(ct2.size()>=2){
  typename T2::const_iterator c2Itr(ct2.begin());
  ++c2Itr;
  cout<<*c2Itr<<endl;
 }
 
 return *ct1;
}


int _tmain(int argc, _TCHAR* argv[])
{
 std::vector<int> vtr;
 vtr.push_back(1);
 vtr.push_back(2);
 auto_ptr<char> ptr(new char);
 *ptr = 'A';
 MyIter<char> myItr(ptr.get());
 cout<<Testfun<MyIter<char>, std::vector<int>>(myItr, vtr)<<endl;

 return 0;

}

C++模板中若遇到嵌套名字,默认是不认为其为类型,编译器会考虑到各种输入,比如是静态变量,全局变量等等。所以必须在前面添加typename声明它是一个类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值