猿问

在参数上重载宏

在参数上重载宏

我有两个宏FOO2FOO3:

#define FOO2(x,y) ...#define FOO3(x,y,z) ...

我想定义一个新的宏FOO详情如下:

#define FOO(x,y) FOO2(x,y)#define FOO(x,y,z) FOO3(x,y,z)

但这不起作用,因为宏不会对参数超载。

不修改FOO2FOO3,有什么方法可以定义宏吗?FOO(使用__VA_ARGS__或以其他方式)获得同样的调度效果FOO(x,y)FOO2,和FOO(x,y,z)FOO3?


达令说
浏览 529回答 3
3回答

胡说叔叔

添加到网络编码器的回答,实际上,在GCC的帮助下,您可以使用0参数宏来完成这一任务。##__VA_ARGS__延期:#define GET_MACRO(_0, _1, _2, NAME, ...) NAME #define FOO(...) GET_MACRO(_0, ##__VA_ARGS__, FOO2, FOO1, FOO0)(__VA_ARGS__)
随时随地看视频慕课网APP
我要回答