[英]C++ Preprocessor concatenation operation
我想使用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:錯誤:粘貼“。” 並且“黑色”不提供有效的預處理令牌
16:11:注意:擴展宏'GetBlack'
C ++外殼:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.