Betrachten Sie dieses Makro:Variadische Makros mit null Argumente und Komma
#define MAKE_TEMPLATE(...) template <typename T, __VA_ARGS__ >
Wenn mit Null Argumente verwendet wird, erzeugt es schlecht Code, da der Compiler eine Kennung nach dem Komma erwartet. Tatsächlich ist der Vorprozessor von VC klug genug, um das Komma zu entfernen, aber GCCs nicht. Da Makros kann nicht überlastet werden, scheint es, wie es ein separates Makro für diesen speziellen Fall nimmt es richtig zu machen, wie in:
#define MAKE_TEMPLATE_Z() template <typename T>
Gibt es eine Möglichkeit, es ohne zu machen arbeiten, um das zweite Makro einzuführen?
Danke. Übrigens, ist das Standardverhalten oder ein Gcc-Ding? – uj2
@ uj2: Es ist GCC; Der Standard verbietet einfach leere Varianzeigen. Übrigens vermischt das C99 mit C++, daher ist dieser Code strikt nicht-Standard, es sei denn, Sie sind in C++ 0x ... in diesem Fall sollten Sie ... – Potatoswatter
Haben Sie nichts dagegen, die Vorlage, es ist nur ein Spielzeug-Beispiel. Wie ist das notwendig 0x, definiert C++ 98/03 variadic Makros nicht? – uj2