导航菜单

C++编程/模板编程
课程进度 63% · 第12/18章12/18章 · 标签 1/3
1

函数模板基础

使用模板实现通用的函数功能,避免为每种类型重复编写代码。

cpp
1
// 基本函数模板
2
template<typename T>
3
T max(T a, T b) {
4
return (a > b) ? a : b;
5
}
6
 
7
// 多类型参数模板
8
template<typename T, typename U>
9
auto add(T a, U b) -> decltype(a + b) {
10
return a + b;
11
}
12
 
13
// 带约束的函数模板(C++20)
14
template<typename T>
15
requires std::is_arithmetic_v<T>
16
T square(T x) {
17
return x * x;
18
}
19
 
20
int main() {
21
cout << max(10, 20) << endl; // int
22
cout << max(3.14, 2.72) << endl; // double
23
cout << max("hello", "world") << endl; // string
24
 
25
cout << add(5, 3.14) << endl; // int + double
26
cout << square(5) << endl; // 25
27
}

📖函数模板支持类型参数自动推导。可指定多个模板参数。C++20 支持 concept 约束

2

模板特化与重载

cpp
1
// 通用模板
2
template<typename T>
3
void print(T value) {
4
cout << value << endl;
5
}
6
 
7
// 完全特化:针对特定类型
8
template<>
9
void print<bool>(bool value) {
10
cout << (value ? "true" : "false")
11
<< endl;
12
}
13
 
14
template<>
15
void print<vector<int>>(
16
vector<int> vec) {
17
cout << "[";
18
for (size_t i = 0; i < vec.size(); i++) {
19
cout << vec[i];
20
if (i < vec.size() - 1) cout << ", ";
21
}
22
cout << "]" << endl;
23
}
24
 
25
// 非类型模板参数
26
template<typename T, int Size>
27
class FixedArray {
28
T data[Size];
29
public:
30
int size() const { return Size; }
31
};