C++沉思录__typename的用法

关于typename的用法,比较为大家所熟知的有一种:类模型引入的声明

template<typename T>
class Atype
{

}

还有另外一种,就是一种很特别的情况。

当使用模板类型中定义的类型时,该怎么办呢?可以使用关键字typename。

/*
从定义中可以说明   typedef typename T::value_type value_type; 这句话强调
我们定义了一种类型的变量 这种变量类型依赖于模板参数类型 模板类中一定定义了这样一种类型
*/
class AType {
public:
   typedef int value_type;
};
 
template<class T>
class TSample {
    typedef typename T::value_type value_type;
}

当使用TSample<AType>的时候,TSample的value_type就变成了AType::value_type。

当需要一个非实例化模板内部定义的类型时,就必须使用typename了。比如,定义一个模板类,这个类又使用了std::vector,

template<class T>
struct MyVector {
     std::vector<T> vec;
     typedef typename std::vector<T>::iterator;
};

为什么这样定义呢,C++默认就是将value_type解释为一个变量的。所以,为了和变量区分,必须使用typename告诉编译器这是一个类型。

猜你喜欢

转载自blog.csdn.net/weixin_39804483/article/details/83039442