模板是C++中实现泛型编程的核心机制,它允许编写独立于具体数据类型的代码,增强代码复用性。这篇笔记我们对C++中的函数模板和类模板进行简单介绍。
下面例子代码我们编写了一个函数模板,它实现了支持泛型的两个元素相加功能。
#include <iostream>
#include <string>
template <typename T> T add(T a, T b) { return a + b; }
int main() {
double sum = add(1.0, 2.2);
std::cout << "Sum: " << sum << std::endl;
std::string str1 = "Hello ";
std::string str2 = "world";
std::string cat = add(str1, str2);
std::cout << "Concatenated: " << cat << std::endl;
return 0;
}
模板使用template
关键字定义,<typename T>
表示模板使用的一个类型是T
,这里的T
不是实际类型而是一个类型参数,类型参数可以在函数的参数、返回值和函数体中使用。调用函数模板时,编译器会根据实参自动推导模板类型参数,我们也可以手动明确指定。
double sum = add<double>(1.0, 2.2);
类模板与函数模板类似,类中的成员数据类型可以使用模板参数指定。
#include <iostream>
#include <string>
template <typename T> class Demo {
public:
T value;
Demo(T value) : value(value) {}
T getValue() { return value; }
};
int main() {
Demo<std::string> demo("Hello");
std::cout << demo.getValue() << std::endl;
return 0;
}
类模板中,我们不能自动推导类型,类型参数需要明确指定。