C++ 模板与泛型知识点
-
类模板中,
typename
和class
的区别:1)在类模板声明中,
template<class T> class Student;
和template<typename T> class Student;
没有区别2)什么场景中只能使用
typename
而不能使用class
在涉及到一个在
template
中的嵌套依赖类型名的任何时候,需要把单词typename
放在紧挨着它的前面 什么叫嵌套依赖类型名?
下面是一个实例:
template<typename C> // print 2nd element in void print2nd(const C& container) // container; { // this is not valid C++! if (container.size() >= 2) { C::const_iterator iter(container.begin()); // get iterator to 1st element C::const_iterator * x; //这种用法是错误的,编译器不知道这是一个类型还是一个成员名称(静态数据成员或静态函数),编译不会通过 typename C::const_iterator *x; //正确用法 ++iter; // move iter to 2nd element int value = *iter; // copy that element to