簡短版本:如何將變量參數函數中的...
代表的內容傳遞給另一個函數,而無需先將其解析爲va_list
?如何將變量參數傳遞給另一個函數?
龍版本:
下面是一類礦井的兩個功能。我想提請你注意,每個功能的前四行是相同的。而且我在這門課中有六個與前四行相同的其他功能。
void cyclOps::Logger::warn(char* szFile, char* szFunction, int iLine, char* szFormat, ...) {
va_list vaArguments;
va_start(vaArguments, szFormat);
char szOutput[10000];
_vsnprintf_s(szOutput, CYCLOPSSIZEOF(szOutput), _TRUNCATE, szFormat, vaArguments);
this->log("WARNING: %s [%s - %s(%d)]", szOutput, szFile, szFunction, iLine);
}
void cyclOps::Logger::info(char* szFormat, ...) {
va_list vaArguments;
va_start(vaArguments, szFormat);
char szOutput[10000];
_vsnprintf_s(szOutput, CYCLOPSSIZEOF(szOutput), _TRUNCATE, szFormat, vaArguments);
this->log("INFO: %s", szOutput);
}
我願把這四個相同的線稱爲summarizeVariableArguments()
一個單一的功能,並調用它像這樣...
void cyclOps::Logger::info(char* szFormat, ...) {
std::string strOutput = this->summarizeVariableArguments(/* TBD */);
this->log("INFO: %s", strOutput.c_str());
}
...其中的strOutput
的內容是相同的作爲前兩個函數中szOutput
的內容。但是,如何將...
參數傳遞給另一個函數?
我不認爲你可以這樣做。你必須首先解析並重新包裝列表。 – Mike
你不能。對於日誌記錄,我建議你使用輸出流範例,使用'<<'運算符將輸出鏈接在一起。當然,在C程序中是不可能的,只能用C++。 –
你的內部函數應該都是'va_list'。只有外層應該使用'...',然後調用'va_list'版本,因爲你不能將一個'...'設置爲另一個。這也是爲什麼像'vfprintf','vsprintf'等函數存在的原因。 – melpomene