C++中的模版是一种通用编程工具,它允许我们编写通用的函数或者类(函数模版and类模版),可以根据不同的数据类型进行参数化。
模板是根据参数类型生成代码的蓝图或模具。通过使用尖括号<>和关键字template,我们可以定义函数模板和类模板。
函数模板允许我们在不同的数据类型之间重用相同的函数代码,只需改变参数类型。类模板允许我们定义通用的类,其中一些成员变量和函数的类型可以是模板参数。
模版的作用:可以提高代码的可重用性和灵活性,减少重复编写类似代码的工作,同时也可以提高程序的效率。
函数模版
template <typename T>
返回类型 函数名(参数列表) {
// 函数体
}
其中,typename 或 class 是用于声明模板参数的关键字,T 是模板参数名称,可以根据需要选择其他名称。函数模板的参数列表可以包含任意数量和类型的参数。
一个简单的例子(函数模版):
#include
// 定义函数模板
template <typename T>
T maximum(T a, T b) {
return (a > b) ? a : b;
}
int main() {
int x = 5, y = 10;
float f1 = 3.14, f2 = 2.71;
// 调用函数模板
int max_int = maximum(x, y);
float max_float = maximum(f1, f2);
std::cout << "Max int: " << max_int << std::endl;
std::cout << "Max float: " << max_float << std::endl;
return 0;
}
在上述代码中,我们定义了一个函数模板 maximum,它接受两个类型相同的参数,并返回它们中的较大值。在 main 函数中,我们分别传入整型和浮点型参数调用了 maximum 函数模板,并将返回的较大值打印输出。
运行上述代码,将会输出以下结果:
Max int: 10
Max float: 3.14
可以看到,函数模板 maximum 根据传入的参数类型进行了实例化,并正确返回了较大值。
类模版
template <typename T>
class 类名 {
// 类成员和函数定义
};
类模板的定义使用与函数模板类似的语法,使用typename或class关键字声明模板参数,并在类内部定义成员变量和成员函数。类模板可以包含任意数量和类型的成员。
示例:
#include
// 定义一个类模板
template <typename T>
class MyTemplateClass {
public:
MyTemplateClass(T value) : data(value) {}
void display() {
std::cout << "Value: " << data << std::endl;
}
private:
T data;
};
int main() {
// 使用类模板创建对象
MyTemplateClass<int> intObj(5);
intObj.display();
MyTemplateClass<double> doubleObj(3.14);
doubleObj.display();
MyTemplateClass<std::string> stringObj("Hello, World!");
stringObj.display();
return 0;
}
在上面的代码中,我们定义了一个类模板 MyTemplateClass,它接受一个类型参数 T。类模板中包含一个数据成员 data 和一个成员函数 display,用于显示存储的值。在 main 函数中,我们使用不同的类型参数创建了几个对象,并调用了 display 函数来显示存储的值。
在示例中,我们分别使用了 int、double 和 std::string 作为类型参数创建了对象。
上述示例输出结果:
Value: 5
Value: 3.14
Value: Hello, World!