C++中的typedef typename 作用

今天在代码里看到了这样一段代码:

typedef typename RefBase::weakref_type weakref_type;

起初一直搞不懂为什么要加个typename,后来搜索了一下才知道这个关键字是有目的的:

如果不加这个关键字,编译器就不知道RefBase::weakref_type到底是个什么东西?可能是静态成员变量,也有可能是静态成员函数,也有可能是内部类。

加上这个关键字等于手动告诉编译器:RefBase::weakref_type 就是一个类型。

例:

template<typename T>   
class A {  
public:  
    typedef T a_type;  
};  
template<typename A>  
class B {  
public:  
    //typedef A::a_type b_type;  
    typedef typename A::a_type b_type;  
};  
int main() {  
    B<A<int>> b;  
    return 0;  
}  

如果把注释取消,就会产生编译错误。

原文地址:https://www.cnblogs.com/yongdaimi/p/9564554.html