考慮這個宏:可變參數的宏零個參數,和逗號
#define MAKE_TEMPLATE(...) template <typename T, __VA_ARGS__ >
當與零個參數使用它產生壞的代碼,因爲編譯器期望逗號之後的標識符。事實上,VC的預處理器足夠聰明,可以刪除逗號,但GCC不是。 由於宏不能超載,好像它需要一個單獨的宏這種特殊情況下得到它的權利,如:
#define MAKE_TEMPLATE_Z() template <typename T>
有沒有什麼辦法讓它不引入第二個宏工作?
謝謝。順便說一句,這是標準的行爲,還是一個GCC的東西? – uj2 2010-08-25 06:14:54
@ uj2:這是GCC;標準只禁止空的可變參數列表。順便說一句,這是混合C99與C++,所以這段代碼是嚴格的非標準的,除非你在C++ 0x ...在這種情況下,你應該... – Potatoswatter 2010-08-25 06:16:48
不介意模板,它只是一個玩具的例子。這怎麼會是0x,C++ 98/03沒有定義可變宏? – uj2 2010-08-25 06:22:13