c++11 可變參數模板類
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vector> #include <map> // 在C++11之前,類模板和函數模板只能含有固定數量的模板參數。C++11增強了模板功能,允許模板定義中包含0到任意個模板參數,這就是可變參數模板。 // 可變參數模板類 繼承方式展開參數包 // 可變參數模板類的展開一般需要定義2 ~ 3個類,包含類聲明和特化的模板類 template<typename... A> class BMW{}; // 變長模板的聲明 template<typename Head, typename... Tail> // 遞歸的偏特化定義 class BMW<Head, Tail...> : public BMW<Tail...> {//當實例化對象時,則會引起基類的遞歸構造 public: BMW() { printf("type: %s\n", typeid(Head).name()); } Head head; }; template<> class BMW<>{}; // 邊界條件 // 模板遞歸和特化方式展開參數包 template <long... nums> struct Multiply;// 變長模板的聲明 template <long first, long... last> struct Multiply<first, last...> // 變長模板類 { static const long val = first * Multiply<last...>::val; }; template<> struct Multiply<> // 邊界條件 { static const long val = 1; }; void mytest() { BMW<int, char, float> car; /* 運行結果: type: f type: c type: i */ std::cout << Multiply<2, 3, 4, 5>::val << std::endl; // 120 return; } int main() { mytest(); system("pause"); return 0; }