当使用模板类型中定义的类型时,该怎么办呢?可以使用关键字typename。
例如
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;
};