可變引數模板--案例2(實現自己的printf)
利用可變模板引數自定義printf函式,直接上程式碼。
/*******************************************
* Name: example2.cpp
* Describe: 可變模板引數例項2:重寫printf
* Author: SSCOCA
* Version: 1.00
* Date: 2018年8月9日
* Other:
*********************************************/
#include <iostream>
using namespace std;
void printf(const char* s){
while (*s)
{
if (*s == '%' && *(++s) != '%')
throw runtime_error("invalid format string:miss argument");
cout << *s++;
}
}
template<typename T, typename... Args>
void printf(const char* s, T value, Args... args)
{
while (*s)
{
if (*s == '%' && *(++s) != '%'){
cout << value;
printf(++s, args...);
return;
}
cout << *s++;
}
throw logic_error("extra arguments provided to print");
}
void main(){
printf("%d-%s-%p\n", 12, "This is sscoca", new int);
}