Wie leite ich eine variable Anzahl von Argumenten an eine andere Funktion weiter? [Duplikat]

8

In meiner Anwendung habe ich viele Protokolle. Ich sammle alle Fehler von allen Protokollen an einem Ort namens errorsLogger . Ich habe es so implementiert:

%Vor%

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?

    
javapowered 08.05.2013, 18:44
quelle

3 Antworten

13

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:

%Vor%

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%     
Jon Purdy 08.05.2013, 18:58
quelle
5

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.

    
user529758 08.05.2013 18:48
quelle
0

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.

    
James Holderness 08.05.2013 18:49
quelle

Tags und Links