模板类是一种类模板,它类似于一个模具,可以根据给定的参数生成具体的类,也称为实例化。模板类的提出主要是为了减少代码的重复。例如,我们可以用下面的代码交换两个数b和c:
a = b; b = c; c = a;
这个交换过程与变量的具体类型无关,因此我们可以用它来交换两个整数,或者两个浮点数。更一般地,我们可以用它来交换任何具有赋值运算符的类型。因此,我们可以使用模板函数进行一般化:
template<class T> void swap(T &b, T &c){ a = b; b = c; c = a; }
在模板函数中,<class T>代表后面尖括号中的是模板参数,T代表参数是类。根据需要,我们可以用swap<int>(b,c)来交换两个整数,swap<double>(b,c)来交换两个浮点数。由于编译器可以根据变量的具体类型推导T的具体含义,所以我们可以简写为swap(b,c)。
如果我们需要一个类型来代表动态数组并且支持size成员函数,我们可以使用模板类。比如,如果是整型的数组,我们可以写class vector_int{size_t size() const;}; 如果是浮点类型的数组,我们可以写class vector_double{size_t size() const;};但是它们的代码是如此的类似,因此我们希望将它一般化。我们将它定义为模板类:
template<class T> class vector{size_t size() const;};
因此,vec_int等同于vector<int>,而vector_double等同于vector<double>。
有时候我们需要的类在大多数情况下是一样的,但是对于某些特殊情形可能不太一样。在这种情况下,C++提供了模板特化。当模板的参数取某个具体的值时,我们可以使用不同的模板。定义方式如下:
template<> class vector<bool>{size_t size() const;};
因为它是一个特化的模板类,只有普通模板存在的情况下,它的存在才是合法的。
相关推荐
© 2023-2025 百科书库. All Rights Reserved.
我来回答