C++新特性__变参模板(Variadic Templates)

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <bitset>
 4 
 5 // 实现函数输入任意参数
 6 template <typename T, typename... Types>
 7 void print(const T& firstArg, const Types&... args)
 8 {
 9     std::cout << firstArg << std::endl;
10     // 可以使用sizeof...()知晓变参的个数
11     std::cout << sizeof...(Types) << " "<<sizeof...(args)<<std::endl;
12 
13     // 注意此处的...在args后面
14     print(args...);
15 }
16 // 最后一个递归函数入参为空,所以需要定义一个终止条件
17 void print()
18 {
19 }
20 
21 int main()
22 {
23     print("hello",123, 1.233,std::bitset<32>(23));
24     return 0;
25 }

输出:

 

 1 // 利用变参模板实现继承的递归,从而通过实现一个tuple
 2 template<typename... Values>  class Tuple;
 3 template<> class Tuple<> {}; //终止条件
 4 template<typename Head, typename... Tail>
 5 class Tuple<Head, Tail...>
 6     :private Tuple<Tail...>
 7 {
 8     typedef Tuple<Tail...> inherited;
 9 public:
10     Tuple() {};
11     Tuple(Head h, Tail... t) :m_head(h), inherited(t...) {} // inherited()这里是调用父类的构造函数
12     Head head() { return m_head; }
13     inherited& tail() { return *this; }
14 private:
15     Head m_head;
16 };

 

posted @ 2021-01-20 13:05  ho966  阅读(206)  评论(0编辑  收藏  举报