Nella mia applicazione ho molti registri. Accumulo tutti gli errori di tutti i registri in un'unica posizione denominata errorsLogger
. Ho implementato in questo modo:come inoltrare il numero variabile di argomenti in un'altra funzione?
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);
}
Tuttavia questo codice non funziona come previsto errorsLogger
contiene un po 'strano corde - sembra argomenti variabili non è stata approvata. Come risolvere il mio codice per essere valido?
è necessaria una versione di 'Error' che prende un [' va_list'] (http://en.cppreference.com/w/cpp/utility/variadic/va_list). – BoBTFish
Considerare la modifica dell'interfaccia del logger in modo che assomigli a 'ostream', sarete in grado di fare cose come:' Logger :: error() << "la variabile x è" << x; 'In effetti' Logger :: error() 'può restituire un' ostream & ' – piokuc
posso semplicemente formattare una stringa come primo passo e poi inoltrare semplicemente std :: string? – javapowered