W mojej aplikacji mam dużo dzienników. Łączę wszystkie błędy ze wszystkich dzienników w jednym miejscu o nazwie errorsLogger
. I zostały wdrożone to w ten sposób:jak przekazać zmienną liczbę argumentów do innej funkcji?
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);
}
Jednak ten kod nie działa zgodnie z oczekiwaniami errorsLogger
zawiera trochę dziwne ciągi - wydaje się zmienne argumenty nie została podjęta. Jak naprawić mój kod, aby był ważny?
Trzeba wersję 'Error' który zajmuje [' va_list'] (http://en.cppreference.com/w/cpp/utility/variadic/va_list). – BoBTFish
Zastanów się nad zmianą interfejsu twojego loggera tak, aby wyglądał jak 'ostream', będziesz mógł robić takie rzeczy jak:' Logger :: error() << "zmienna x jest" << x; 'W rzeczywistości' Logger :: error() 'może zwrócić' ostream & ' – piokuc
czy mogę po prostu sformatować ciąg znaków jako pierwszy krok, a następnie po prostu przesyłać dalej ciąg std :: string? – javapowered