模版之变参模板
# 模板之变参模板
变参模板可以用任意数量的实参实例化。这里实现了一个简单的编译期计算Add函数,有助于理解变参数模板。
形式如下:
template<typename... Ts>
...
template<class... Ts>
...
template<T... Ts> // T: 类型
...
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
typename|class... Ts
被称为模版形参包,Ts
就是包名。
形参包的使用(展开):可以展开成零个或更多个参数的逗号分隔列表。必须包含至少一个形参包。下面给出例子:
template<size_t a>
size_t Add()
{
return a;
}
template<size_t a, size_t b, size_t... Ts>
size_t Add()
{
return a + Add<b, Ts...>();
}
Add<1, 2, 3, 4>();
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
这个是利用模板实现的编译期相加函数,最外层形参包是1,2,3,4
,第一次调用就被展开成a = 1, b = 2, Ts=3,4
。
如果理解这个编译期计算 —— Add,变参数模板就学会了。
更多更详细的介绍参考C++ Reference (opens new window)
上次更新: 2023/02/22, 20:44:06