簡體   English   中英

C ++預處理器連接操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM