第一节 · 绘制蓝图 · 初试定义模板
模板是 C++ 泛型编程的基础。函数模板让我们能够编写与类型无关的代码,由编译器根据实际类型生成具体的函数。
为什么需要模板
// 没有模板,需要为每种类型写一个函数
int maxInt(int a, int b) { return a > b ? a : b; }
double maxDouble(double a, double b) { return a > b ? a : b; }
string maxString(string a, string b) { return a > b ? a : b; }
// 有了模板,一个函数就够了
template<typename T>
T maximum(T a, T b)
{
return a > b ? a : b;
}
int main()
{
cout << maximum(3, 5) << endl; // int
cout << maximum(3.14, 2.72) << endl; // double
cout << maximum("abc"s, "def"s) << endl; // string
return 0;
}模板语法
模板实例化
非类型模板参数
模板特化
SFINAE 与 enable_if
可变参数模板
完美转发
constexpr 函数模板
习题
实现一个通用的
swap函数模板。编写一个可以比较任意类型数组的函数模板。
使用可变参数模板实现一个
sum函数。
Last updated