定义
C++模板是一种编程技术,它允许程序员在编译时生成具有特定类型的函数或类,而无需在运行时进行类型检查。模板是一种泛型编程的方式,它使得程序员可以编写可适用于多种数据类型的代码,提高了代码的重用性和灵活性。
C++模板可以分为函数模板和类模板两种类型。
- 函数模板定义了一种通用的函数,可以接受多种类型的参数,并根据不同的类型生成相应的函数。
- 类模板则是定义了一种通用的类,可以包含多种类型的成员变量和成员函数。
函数模板的定义
template <typename T>
void functionName(T parameterName) {// 函数体
}
其中,typename T
表示模板参数,可以是任何数据类型。functionName
是函数名,parameterName
是参数名。在函数体中,可以使用T
表示参数的类型。
类模板的定义
template <typename T>
class className {
public:T data;void functionName() {// 函数体}
};
其中,typename T
表示模板参数,可以是任何数据类型。className
是类名,data
是类中的成员变量,functionName()
是类中的成员函数。在类中的函数体中,可以使用T
表示数据类型。
使用注意
使用模板时,编译器会根据实际类型生成相应的函数或类。例如,如果使用int
类型的参数调用函数模板,编译器会生成一个接受int
类型参数的函数。如果使用int
类型的对象创建类模板的实例,编译器会生成一个包含int
类型成员变量和成员函数的类。
需要注意的是,在使用类模板时,如果在类中的函数使用了模板参数,那么这个函数必须在类外定义。否则,编译器会报错。
应用举例
#include <iostream>
#include <vector>// 函数模板
template <typename T>
void printArray(const std::vector<T>& arr) {for (const auto& element : arr) {std::cout << element << " ";}std::cout << std::endl;
}// 类模板
template <typename T>
class Box {
public:Box(T value) : value_(value) {}void print() const { std::cout << value_ << std::endl; }
private:T value_;
};int main() {// 使用int类型调用函数模板std::vector<int> intArray = {1, 2, 3, 4, 5};printArray(intArray);// 使用double类型调用函数模板std::vector<double> doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5};printArray(doubleArray);// 使用int类型创建类模板实例Box<int> intBox(10);intBox.print();// 使用double类型创建类模板实例Box<double> doubleBox(10.5);doubleBox.print();return 0;
}