目前在改一個非常legacy的專案,Log function signature基本上寫死了沒辦法改 :
Log(const char* type, const char* client, const char* log);
以前看他們都是寫成這樣
char log[48];
sprintf(log, "This is a PEN : %s PINEAPPLE!");
Log(TYPE, CLIENT, log);
這寫法顯然是有問題的,但是這個VC6等級的編譯器又不支援sprintf_n
更不用說這其實挺麻煩的
所以後期我就把它改寫成這樣
stringstream log;
log << "This is a PEN : " << pen << " PINEAPPLE!";
Log(TYPE, CLIENT, log.str().c_str());
但是顯然這還是有點麻煩
自己是寫了一個ostream拼貼物件讓他看起來像是這樣
包含了一個operator const char*()
Log(TYPE, CLIENT, log << "This is a PEN : " << pen << " PINEAPPLE!");
來讓他能夠串起來,讓他能夠吃大多數的變數型別
問題來了,有沒有std函數能滿足這個需求?
Log希望能讓他們寫的方便一點,不然他們一個個都不想Log了 -o-||