我想使用C++预处理器连接器.
#include#include #define GetBlack(colorName) (color.##colorName) struct Color { int black = 0; }; int main() { Color color; int c = color.black; int d = GetBlack(black); }
我得到的错误是
5:35:错误:粘贴"." 并且"black"没有给出有效的预处理令牌
16:11:注意:在扩展宏'GetBlack'时
C++ Shell:http:
//cpp.sh/3547x
有小费吗?
你实际上并不想在这里连接.你只是将预处理"令牌"粘贴到位,所以只需使用:
#define GetBlack(colorName) (color.colorName)
宏参数名称colorName
已扩展到位.然后
int d = GetBlack(black);
将扩展到
int d = color.black;
连接是将两个"令牌"合并为一个,见这里.
例如,如果成员已命名black_value
,但您只是想要调用GetBlack(black)
,则宏定义将类似于:
#define GetBlack(colourName) colour.colourName##_value;