首页 > 其他 > 详细

class与Typename的区别

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

一:相同点:

  在模板定义时的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的区别

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!