In meiner Anwendung habe ich viele Protokolle. Ich sammle alle Fehler von allen Protokollen an einem Ort namens errorsLogger
. Ich habe es auf diese Weise umgesetzt:Wie man eine variable Anzahl von Argumenten an eine andere Funktion weiterleitet?
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);
}
jedoch dieser Code nicht wie erwartet funktioniert errorsLogger
ein wenig seltsam Strings enthält - es scheint, variable Argumente nicht übergeben wurde. Wie kann ich meinen Code reparieren?
Sie benötigen eine Version von 'Error', die eine [' va_list'] (http://en.cppreference.com/w/cpp/utility/variadic/va_list) benötigt. – BoBTFish
Überlegen Sie die Schnittstelle Ihres Loggers so zu ändern, dass es aussieht wie 'ostream', Sie können Dinge tun wie: 'Logger :: error() <<" die Variable x ist "<< x;' Tatsächlich 'Logger :: error() 'kann einen' ostream & 'zurückgeben – piokuc
kann ich einfach einen String als ersten Schritt formatieren und dann einfach std :: string weiterleiten? – javapowered