В моем приложении у меня много журналов. Я накапливаю все ошибки из всех журналов в одном месте по имени 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
содержит немного странные строки - кажется, переменная аргументы не был принят. Как исправить мой код?
Вам нужна версия 'Error', который принимает [' va_list'] (http://en.cppreference.com/w/cpp/utility/variadic/va_list). – BoBTFish
Рассмотрите возможность изменения интерфейса вашего регистратора, чтобы он выглядел как 'ostream', вы сможете делать такие вещи, как:' Logger :: error() << "переменная x есть" << x; 'Фактически' Logger :: error() 'может возвращать' ostream & ' – piokuc
Могу ли я просто форматировать строку как первый шаг, а затем просто переместить std :: string? – javapowered