|
|
@@ -496,4 +496,39 @@ l();// 输出 hello world
|
|
|
auto f = [=, &id]{
|
|
|
// ...
|
|
|
};
|
|
|
-```
|
|
|
+```
|
|
|
+
|
|
|
+## Vaiadic Templates
|
|
|
+
|
|
|
+允许定义可变数量的模板参数。在传统的模板中,参数数量是固定的,而 Variadic Templates 允许我们在模板中接受任意数量的参数
|
|
|
+
|
|
|
+```cpp
|
|
|
+void func() { /* ... */}
|
|
|
+
|
|
|
+template<typenaem T, typename... Types>
|
|
|
+void func(const T& firstArg, const Types... args) {
|
|
|
+ // do something
|
|
|
+ func(args);
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+```cpp
|
|
|
+template<typename T>
|
|
|
+T sum(T t) {
|
|
|
+ return t;
|
|
|
+}
|
|
|
+
|
|
|
+template<typename T, typename... Args>
|
|
|
+T sum(T t, Args... args) {
|
|
|
+ return t + sum(args...);
|
|
|
+}
|
|
|
+
|
|
|
+int main() {
|
|
|
+ int result = sum(1, 2, 3, 4, 5);
|
|
|
+ // result = 1 + 2 + 3 + 4 + 5 = 15
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+利用参数个数的逐一递减的特性实现递归函数调用
|
|
|
+
|