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