Ich versuche, eine Klassenmethode für Debug-Ausdrucke zu definieren, die verhalten sich wie printf
:Wie soll ich __attribute__ ((format (printf, x, y))) innerhalb einer Klassenmethode in C++ verwenden?
error: format string argument not a string type
ich daran erinnert, dass eine Klassenmethode Deklaration hat einen impliziten this
Parameter: über
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 1, 2)))
Dies beklagt , so änderte ich die Positionen der Parameter zu 2, 3:
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 2, 3)))
und jetzt kompiliert es, aber es sieht so aus, als wären die Parameter verschoben, als ob der this
Parameter als Teil der Argumentliste behandelt würde.
Wie kann ich der Funktion mitteilen, dass this
nicht Teil der Zeichenfolge ist, die ich drucken möchte?
Können Sie variadic Vorlagen verwenden? Wenn ja, kannst du einen [type safe printf] schreiben (http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html) – chris
Denke nicht zu viel über "das" nach. Es ist kein explizites Argument, Punkt. Folgen Sie einfach dem GCC-Handbuch, das besagt, dass Sie für Elementfunktionen 1 zu den 'format'-Attributargumenten hinzufügen müssen. Es ist nur eine undurchsichtige Regel, die Ihnen vom Hersteller einer Compiler-Erweiterung gegeben wird. –
printf (2, 3) ist richtig. Definieren Sie "scheint wie verschoben" ...? –