在编程,特别是在 C++ 中,模板是一种强大的功能,允许你创建泛型代码。使用模板可以让你编写一次代码,而在不同类型上重复使用。
C++ 中主要有两种类型的模板:
1.函数模板 (Function Template):允许创建可以处理不同数据类型的函数。
2.类模板 (Class Template):允许创建可以处理不同数据类型的类。
函数模板用于定义一个函数,其中至少一个参数是类型参数。以下是一个简单的函数模板示例:
#include
// 定义一个函数模板
template
T add(T a, T b) {
return a + b;
}
int main() {
std::cout << add(3, 4) << std::endl; // 输出: 7
std::cout << add(3.5, 4.2) << std::endl; // 输出: 7.7
return 0;
}
/*add 函数模板接受一个类型参数 T,可以处理任何类型的加法运算(只要 + 操作符被重载)。*/
类模板允许定义一个类,其中至少一个数据成员是类型参数。以下是一个简单的类模板示例:
#include
// 定义一个类模板
template
class Pair {
private:
T first;
T second;
public:
Pair(T a, T b) : first(a), second(b) {}
T getFirst() const { return first; }
T getSecond() const { return second; }
};
int main() {
Pair intPair(1, 2);
std::cout << "First: " << intPair.getFirst() << ", Second: " << intPair.getSecond() << std::endl; // 输出: First: 1, Second: 2
Pair stringPair("Hello", "World");
std::cout << "First: " << stringPair.getFirst() << ", Second: " << stringPair.getSecond() << std::endl; // 输出: First: Hello, Second: World
return 0;
}
//Pair 类模板可以与不同的数据类型(如 int 和 std::string)一起使用。
#include
// 原始模板定义
template
class MyClass {
public:
void print() { std::cout << "Template version" << std::endl; }
};
// 模板特化
template <>
class MyClass {
public:
void print() { std::cout << "Specialized version for int" << std::endl; }
};
int main() {
MyClass obj1;
obj1.print(); // 输出: Template version
MyClass obj2;
obj2.print(); // 输出: Specialized version for int
return 0;
}