我已经为Visual Studio和铛定义这些宏,他们都编译罚款如何使GCC将'arg,## __ VA_ARGS__'减少为'arg'以将其用作单个宏参数?
#if defined(_MSC_VER)
# define _declare_func(...) PP_CAT(PP_CAT(_declare_func_, PP_NARG(__VA_ARGS__)),(__VA_ARGS__))
# define declare_func(...) _declare_func PP_LEFT_PAREN notused,##__VA_ARGS__ PP_RIGHT_PAREN
#else // clang version
# define _declare_func(...) PP_CAT(_declare_func_, PP_NARG(__VA_ARGS__))(__VA_ARGS__)
# define declare_func(...) _declare_func (notused,##__VA_ARGS__)
#endif
#define _declare_func_1(notused) void my_function()
#define _declare_func_2(notused, scope) void scope::my_function()
class MyClass
{
declare_func();
};
declare_func(MyClass) { }
PP_CAT是一个典型的多级CONCAT宏观
PP_NARG计数的宏参数
PP_LEFT_PAREN和PP_RIGHT_PAREN数量减少到'('和')'
有什么办法可以用GCC来实现这个吗? (我尝试了两个宏版本和GCC 5.2,两者都无法编译,因为逗号似乎在宏分辨率期间传播并且仅在预处理结束时被移除,使得PP_NARG总是减少到'2'而不是'1')
谢谢!
你救了我的一天!万分感谢 !做了这项工作..我确实使用-std = C++ 11而不是std = gnu ++ 11。 – Juicebox