可变参数模板以前没怎么谁用过,本次参考http://www.cnblogs.com/liyiwen/archive/2013/04/13/3018608.html
对可变参数模板有了初步理解。
使用variadic template 对printf 函数 进行编写。
在我看来,可变模板的实现就是类似递归函数一样,通过一层一层调用自身方法完成对 parameter pack 一层一层的拆分,最终成为一个普通函数的过程。
引用参考博文的图片
程序如下:
#include<iostream> #include<exception> #include<stdexcept> using namespace std; void printf1(const char *s) { while(*s){ if(*s=='%'){ if(*(s+1)=='%') s++; else throw runtime_error("invalid format of argument"); } cout << *s++; } return ; } template<typename T,typename... Args> void printf1(const char *s,T value,Args... args) { while(*s){ if(*s=='%'){ if(*(s+1)=='%') s++; else{ cout << value; printf1(s+2,args...); return ; } } cout << *s++ ; } throw runtime_error("extract arguemnts provided to printf"); } int main(int argc,char *argv[]) { int i=23; char c='a'; char *ch="hello world"; printf1("this is int data %d ,this is string data %s this is short data %c ",i,ch,c); return 0; }
程序只是实现了对数据的打印,并没有检查占位符 和实际参数的匹配