码迷,mamicode.com
首页 > 其他好文 > 详细

class与Typename的区别

时间:2014-08-14 11:04:18      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:style   color   strong   ar   代码   line   c++   size   

一:相同点:

  在模板定义时的class和typename是没有区别的

二:不同点:

  1、typename可以表示一个嵌套依赖类型名(nested dependent type name),但是在基类列表成员初始化列表时,可以不用“typename”;

    代码: 

template<class Base>               //此处可以用typename替换
class A : public Base::B           // 基类列表
{
public:
    
    typedef typename Base::B info_type;
    
    A() : Base<T>::B               //成员初始化列表           
    {
        
    }
};

嵌套依赖类型名:  

针对该代码,我们可以发现,在编译时是无法知道Base的具体实现的,那么Base::B,我们则无法判断是一个类型的静态成员,还是一个类的成员函数,那么此处就会产生歧义,这种情况下,编译器默认“如果解析器在一个 template(模板)中遇到一个 nested dependent name(嵌套依赖名字),它假定那个名字不是一个 type(类型),除非你用其它方式告诉它",此时我们就需要typename,来声明Base::B为一个类型,但是在基类列表与成员初始化列表中可以省略。

2、template<typename T, template<typename T> class S>S实际是模板参数,C++规定模板参数只能是class模板,所以这里的class换成typename是不行的。


class与Typename的区别,布布扣,bubuko.com

class与Typename的区别

标签:style   color   strong   ar   代码   line   c++   size   

原文地址:http://my.oschina.net/wangcan/blog/301039

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!