C++中的模板元编程

模板元编程

模板特化: 指的是对某个特定类型或特定类型组合提供模板的定制实现。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;

template <typename T>
void func(T t) {
cout << "Generic template: " << t << endl;
}

// 完全特化模板
template <>
void func<int>(int t) {
cout << "Specialized template for int: " << t << endl;
}

int main() {
func(10); // 使用特化模板
func(3.14); // 使用通用模板
}

模板偏特化: 通常用于处理模板参数中的某些类型特征(比如说指针类型、数组类型等)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostrea>
using namespace std;

template <typename T>
void func(T t) {
cout << "Generic template: " << t << endl;
}

// 偏特化
template <typename T>
void func(T* t) {
cout << "Template specialized for pointer type: " << *t << endl;
}

int main() {
int a = 10;
int* p = &a;

func(a); // 使用通用模板
func(p); // 使用偏特化模板
}

函数重载与模板特化/偏特化的区别:

  • 函数重载:指的是为同一个函数名提供多个不同参数列表的实现。编译器根据传入参数的类型来选择合适的重载版本。函数重载是基于函数参数的类型和数量来选择执行哪个函数,而不涉及模板概念
  • 模板特化/偏特化:是针对模板的类型参数进行定制,根据传入的类型来选择对应的模板实例化。

C++中的模板元编程
http://example.com/2024/12/23/C-中的模板元编程/
作者
凌云行者
发布于
2024年12月23日
许可协议