我想使用C ++预处理器连接器。
#include <iostream>
#include <string>
#define GetBlack(colorName) (color.##colorName)
struct Color
{
int black = 0;
};
int main()
{
Color color;
int c = color.black;
int d = GetBlack(black);
}
我得到的错误是
5:35:错误:粘贴&#34;。&#34;和&#34;黑&#34;不提供有效的预处理令牌
16:11:注意:扩展宏&#39; GetBlack&#39;
C ++外壳:
http://cpp.sh/3547x
任何提示?
答案 0 :(得分:9)
你实际上并不想在这里连接。您只是将预处理“令牌”粘贴到位,因此只需使用:
#define GetBlack(colorName) (color.colorName)
宏参数名colorName
已扩展到位。然后
int d = GetBlack(black);
将扩展为
int d = color.black;
连接是将两个“标记”合并为一个,请参阅here。
例如,如果该成员名为black_value
,但您只想调用GetBlack(black)
,那么宏定义将类似于:
#define GetBlack(colourName) colour.colourName##_value;