C ++宏在Visual Studio中按参数数量重载

时间:2017-02-17 10:08:11

标签: c++ visual-c++ visual-studio-2015 macros variadic-macros

Visual Studio中宏重载的一些奇怪问题。

#define ENUM_INTERNAL(A, ...) A, ENUM_INTERNAL(__VA_ARGS__)
#define ENUM_INTERNAL(A) A, COUNT

#define ENUM(name, ...) struct name { enum en {ENUM_INTERNAL(__VA_ARGS__)}; };

ENUM(xxxx, A1, A2, A3)
static const xxxx::en x = xxxx::A3; 
// All right, macro expanded into struct xxxx { enum en {A1, A2, A3, COUNT}; };

struct xxxx2 { enum en { ENUM_INTERNAL(A1, A2, A3) }; };
static const xxxx2::en x2 = xxxx2::A3; 
// Compile error: no such member. struct xxxx2 { enum en {A1, COUNT}; };

据我所知,实际上没有多少个参数的宏重载。但不知何故,当我们通过__VA_ARGS__表达式传递参数时,它在第一种情况下起作用。为什么会这样?

0 个答案:

没有答案