typename指示一个类型名,而非定义一个类型,以下声明了一个Seq::iterator类型的变量itr,其中Seq是一个模板实例化时才知道的类:
(所以typename一般是与模版一起使用的,表示是一个类型)
typename Seq::iterator itr;
如果没有typename指示,Seq::iterator会被认为是Seq的静态变量,而不是类型名。
typename关键字不会定义一个类型,如果你想定义一个新类型的话,你必须这样:
typedef typename Seq::iterator ITR;
http://blog.csdn.net/fullsail/article/details/8483106
//H文件
template <typename T> class Singleton_2B
{
protected:
typedef T object_type;
//利用的是类的静态全局变量
static T instance_;
public:
static T* instance()
{
return &instance_;
}
};
//因为是类的静态变量,必须有一个通用的声明
template<typename T> typename Singleton_2B<T>::object_type Singleton_2B<T>::instance_;
http://blog.csdn.net/fullsail/article/details/8483106