In meiner Anwendung habe ich viele Protokolle. Ich sammle alle Fehler von allen Protokollen an einem Ort namens errorsLogger
. Ich habe es so implementiert:
Dieser Code funktioniert jedoch nicht wie erwartet. errorsLogger
enthält ein paar seltsame Strings - es scheint, dass variable Argumente nicht übergeben wurden. Wie behebe ich meinen Code als gültig?
Die typische Formulierung davon in C besteht darin, zwei Funktionen zu haben, eine, die ...
akzeptiert, und eine, die eine va_list
akzeptiert (z. B. printf
gegenüber vprintf
). In C ++ ist es bequem, dies mit Überladungen zu tun:
Mit C ++ 11 ist es möglich, direkt mit einer variadischen Vorlage zu arbeiten. Sie können Argumente auch an Variadic-Funktionen im C-Stil weiterleiten.
%Vor%Kurz gesagt, Sie können nicht.
Alles was Sie tun können, ist eine äquivalente Elementfunktion zu schreiben, die ein va_list
anstelle von Variablenargumenten verwendet und das initialisierte va_list
nach unten leitet.
Damit das funktioniert, müsste Logger::Error
so deklariert werden, dass ein va_list
als Parameter angenommen wird, ähnlich wie vfprintf, und nicht variable Argumente in Form von ...
wie fprintf.
Tags und Links c++