Beste Weg, um eine va_list, die für die Spätere Verwendung in C/C++

Ich bin mit einer va_list zu konstruieren, ein string, der dargestellt wird.

void Text2D::SetText(const char *szText, ...)

Dies ist alles schön und gut, aber jetzt hat der Anwender die Möglichkeit die Sprache zu ändern, während die Anwendung ausgeführt wird. Ich brauche, um zu regenerieren, die alle text-strings und re-cache der text-bitmaps nach der Initialisierung. Ich möchte zum speichern der va_list und verwenden Sie es, Wann immer der text erzeugt werden soll.

Ihnen etwas mehr hintergrund, dies geschehen muss, in dem Fall, wo der Schlüssel-string, dass ich die übersetzung hat ein dynamisches Stück von Daten.

"Player Score:%d"

Ist der Schlüssel-string, die ich brauche, um zu übersetzen. Ich möchte die Anzahl(N) in der va_list für die spätere Verwendung (außerhalb der Funktion initialisiert den text) in dem Fall, dass es muss neu übersetzt nach der Initialisierung. Vorzugsweise würde ich gerne eine Kopie der va_list für die Verwendung mit vsnprintf.

Ich habe getan, einige der Forschung zu tun und fand ein paar Möglichkeiten. Einige von denen, die ich Frage, ob es eine entsprechende Methode (in Bezug auf die stabile und portable).

  • Könnten Sie eine bessere Beschreibung was du meinst mit "später"? Ich denke, es sollte ziemlich klar sein, dass jemand 'va_list' kann nur so lange gültig, wie die entsprechende Variable Funktion Aufruf noch aktiv ist (d.h. von den low-level, von der Implementierung abhängige Sicht, solange die entsprechenden stack-frame mit Parametern ist lebendig). Alle versuche, darauf zuzugreifen, nachdem die Funktion zurückgekehrt ist, ist ein Rezept für eine Katastrophe.
  • die Verwendung von Boost.Format stattdessen erstellen Sie die Zeichenfolge. Es gibt keinen Grund, es zu sprengen, geben Sie Sicherheit, wenn Sie es vermeiden können.
  • Ja, wir sind gehen, um am Ende etwas zu tun ähnlich wie diese, weil diese Methode (die in der Frage) ist schlicht mangelhaft.
  • Ich würde nicht schreiben "fehlerhaft." Ich würde schreiben "Umsetzung abhängig." 😉 Ich wünschte, jemand würde versuchen, die Mac-compiler mit dem code, den ich gepostet. Ich bin mal gespannt.
Schreibe einen Kommentar