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 };