Templates使用技巧基础
模板使用技巧基础
这篇文章主要记下实际工程中使用模板的一些基本技巧,其中主要包括typename关键字的使用,定义模板成员函数,定义嵌套类模板,双重模板类型参数(template template parameter),以及零值初始化的技巧。
?
一、关键字typename关键字typename是C++标准化过程中被引入的,目的是告诉编译器模板类型参数或者其内的某个标识符是个类型。
template <typename T> void foo() { T x = T(); // x has undefined value if T is built-in type }
假定T并无默认构造函数时,x的初值就无法被正确初始化,进而引发未定义的行为。因此在定义class template时,一定要定义默认构造函数,初始化其内部成员。当然,如果T本身是内建类型时,如int, bool等, 当默认构造函数被调用后,其值就会被初始化为0。
?
小结:?1. 当要操作一个取决于template parameter的类型名称时,应该在前面加typename关键字修饰。
?2. 嵌套类和成员函数也可以是模板。
?3. 赋值运算符的template版本并不取代默认赋值运算符。
?4. 把class template作为template parameter使用的技巧成为Template Template Parameter。
?5. Template Template Arguments必须完全匹配其对应参数。
?6. 当具现化一个内建类型的变量时,如果需要设定初值,必须明确调用其默认构造函数。
?
?