C++template中typename 和class有什么区别?

又是历史原因,以前是用class,后来C++ Standard 出现后,引入了typename, 所以他们是一样的。

但是,又有一些微妙的不同,因为有时候,你不得不使用typename. 

 

1. 在声明 template parameters(模板参数)时,class 和 typename 是可互换的。

2. 用 typename 去标识 nested dependent type names(嵌套依赖类型名),在 base class lists(基类列表)中或在一个 member initialization list(成员初始化列表)中作为一个 base class identifier(基类标识符)时除外。

 

For example: 

 

代码
1 using namespace std;
2
3 template <class T> int vcount(vector<T> v) {
4 int i;
5 typename vector<T>::iterator vi;
6 for(i=0,vi=v.begin(); vi!=v.end(); i++,vi++)
7 ;
8 return(i);
9 }

 

更详细的可以参考

http://tech.ddvip.com/2006-12/116515389312899.html 

http://blogs.msdn.com/b/slippman/archive/2004/08/11/212768.aspx 

 

posted @ 2010-12-02 17:59  百分百好牛  阅读(2518)  评论(0编辑  收藏  举报