typename一共就两种用法
①修饰模板参数,说明它是一个类型.此时可以用class关键字来代替.
②修饰嵌套依赖类型名
关于第②点要说明如下:
1. 依赖类型名: 一个模板中的 依赖于一个模板参数的名字.
2. 嵌套依赖类型名: 嵌套在一个类内部的一个依赖类型名
比如:
std::list<T>
首先,它是一个依赖于模板参数的类型,所以它是一个依赖类型名
其次,它也是一个嵌套在std内部的类型,所以它是 嵌套依赖类型名,需要用typename来修饰.如下:
typename std::list<T> m_lstT;
记住:
在涉及到一个模板中的嵌套依赖类型名的任何时候,都必须把typename放在紧挨着它的前面