Variadic Templates
- Variadic Templates
谈的是template- function template
- class template
- 变化的是template parameters
- 参数个数:利用参数个数注意递减的特性,实现递归函数调用.使用function template完成
- 参数类型:利用参数个数逐一递减,参数类型也逐一递减的特性,实现递归继承或递归复合,以class template完成.
可变模板参数写的一个小例子
针对函数
模板参数包,函数参数类型包,函数参数包
1 | void print() {} //非模板,和模板的实例形成重载函数;函数没有特化和偏特化 |
可变模板参数实现hash function
1 | template<typename T> |
可变模板参数实现printf
1 | void printf(const char *s) { |
variadic templates与initializer_list
若参数的类型相同,无须使用variadic templates,使用initializer_list<T>即可
使用initializer_list实现max
1 | template<typename __ForwardIterator, typename __Compare> |
使用varadic templates实现max
1 | int maximum(int n) { |
对异于一般的方式处理first元素和last元素
1 | template<int IDX, int MAX, typename... Args> |
可变模板参数实现tuple
通过private 继承实现复合
递归的继承
1 | template<typename...Values> |
通过composite实现复合
1 | // 这两句存在的意义是什么?换言之,为什么需要这两句 |
运行结果
1 | 由内到外构造对象 |