Wie verwende ich Parameterlisten mit variabler Länge mit nur einem Referenzparameter?

8

Vor kurzem habe ich ein lästiges Problem, dass ich Funktionen wie folgt definieren möchte:

%Vor%

Aber es scheint, dass der Referenzwert nicht der letzte Parameter sein kann, wenn die Parameterliste mit variabler Länge verwendet wird.

Ist das eine Möglichkeit, dass ich std :: string als Formatzeichenfolge benutzen kann?

Vielleicht könnten Faktoren oder etwas anderes, das std :: string erkennt und es als c_str () konvertiert, funktionieren, aber ich weiß nicht, wie ich mit der folgenden Parameterliste mit variabler Länge umgehen soll.

Bearbeiten:   Ich benutze nicht variadic Vorlage, weil ich Vsprintf innen verwende. Vermeide die Verwendung von Vsprintf und die Verwendung von std :: stringstream ist eine Option?

    
Jim Yang 06.06.2016, 07:26
quelle

2 Antworten

6

Das Verhalten ist undefiniert : Siehe C ++ - Standard 18.10 / 3 (für C ++ 11 und C ++ 14) oder cppreference.com: Variadische Argumente .

Im Wesentlichen können Sie nur Typen verwenden, die in C mit va_start verfügbar sind, obwohl für den Typ std::nullptr_t eine Ausnahme gemacht wird.

    
Bathsheba 06.06.2016, 07:31
quelle
2

In C ++ besteht die Möglichkeit, "unknown" Argumente zu übergeben, in variadic template:

%Vor%

und Ihre Version mit const char* sollten wahrscheinlich auch variadische Vorlage sein, indem Sie sprintf anstelle von vsprintf verwenden.

    
Jarod42 06.06.2016 08:16
quelle

Tags und Links