Variadic Template
#include<iostream> using namespace std; void printX(){ } template<typename T , typename... args> void printX(const T& f1 , const args&... f2){ cout << f1 << endl; printX(f2...); } int main(){ printX(22 , "hello" , 23 , 24 , 25); return 0; } // 如果想知道传进来的这一包东西有几个, 可以使用sizeof...(args);
例二: 重写printf
void PrintX(const char* p){ while(*p){ if(*p == '%' && *(++p) != '%'){ } cout << *p++; } } template<typename T , typename... Args> void PrintX(const char* p , T type , Args... arg){ while(*p){ if(*p == '%' && *(++p) != '%'){ cout << type << ' ' ; PrintX(++p , arg...); return; } } } int main(){ PrintX("%d%d%d" , 23 , 24 , 25); return 0; }
第六种: 可以利用这种形式,到底要把哪几种类型组合成一包。这种做法非常的精简巧妙。 但是这么用会报错,直接写出它的类型即可。
可以用decltype类型推导
Rvalues references
右值是不可以出现在左边的,而什么是右值呢,最常见的就是临时对象。
这是一个不完美的转接。
如何设计一个具备移动语义意识的classs:
hashtable
hash function
Tuple