在我的應用程序中,我有很多日誌。我確實在一個名爲errorsLogger
的地方積累了所有日誌中的所有錯誤。我實現了這種方式:如何將可變數量的參數轉發給另一個函數?
static Logger errorsLogger;
....
void Logger::Error(std::string format, ...) {
va_list arglist;
va_start(arglist, format);
if (this != &errorsLogger) {
errorsLogger.Error(format, arglist); // how to forward parameters?
}
vfprintf(logFile, , format.c_str(), arglist);
fprintf(logFile, "\n");
fflush(logFile);
va_end(arglist);
}
但是預期errorsLogger
包含有點怪這串代碼不起作用 - 它似乎變量參數沒有通過。如何解決我的代碼有效?
您需要一個採用['va_list'](http://en.cppreference.com/w/cpp/utility/variadic/va_list)的'Error'版本。 – BoBTFish 2013-05-08 18:48:11
考慮改變記錄器的界面,使其看起來像'ostream',你就可以做這樣的事情:'Logger :: error()<<「變量x是」<< x;'事實上'Logger ::錯誤()'可以返回'ostream&' – piokuc 2013-05-08 18:48:18
我可以只格式化一個字符串作爲第一步,然後只是轉發std :: string? – javapowered 2013-05-08 19:03:09