STL模板技巧
文章目录
typename
声明模板参数:template<typename T> ...
,只有在这种语境下,typename
关键字才可以和class
关键字互换
class
关键字 声明类:class A{...};
声明模板参数:template<class T> ...
typename
关键字 声明模板参数:template<typename T> ...
解决嵌套依赖:typename T::A a;
- 无论是声明模板参数还是解决嵌套依赖,都不能使用
struct
关键字
解决嵌套依赖
- 在第一次编译模板代码时,模板参数的具体类型尚不明确,编译器会把依赖于模板参数的嵌套类型理解为某个类的静态成员变量,因此当它看到代码中使用这样的标识符声明其它变量时,会报错误,这就叫嵌套依赖。
|
|
typename
关键字旨在告诉编译器,所引用的标识符是个类型名,可以声明变量,具体类型等到实例化时再定template<typename T> void foo(){typename T::A a; ....}
template
依赖模板参数的模板成员访问
- 在模板代码中,通过依赖于模板参数的对象,引用或指针,访问其带有模板特性的成员,编译器常常因为无法正确理解模板参数列表的左右尖括号,而报编译错误。
|
|
- 在模板名前面加上
template
关键字,意在告诉编译器其后名称是一个模板,便与其就可以正确理解“<>”
了。
|
|
子模板访问基模板
文章作者 Rango
上次更新 2016-12-02