1. 程式人生 > >可變引數模板--案例2(實現自己的printf)

可變引數模板--案例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);
}