2012-01-24 67 views
1

我遇到了以下宏的問題,並且我發現令牌粘貼操作符(##)正在佔用static和返回類型之間的空間:令牌粘貼操作符(##)在我的C++宏中佔用空格

#define MY_FUNCTION(aReturnType) statiC##aReturnType MyFunction() { } 

所以預處理器是把這個:

MY_FUNCTION(bool) 

到這一點:

staticbool MyFunction() { } 

這造成了奇怪的編譯錯誤。

我想出了把周圍的static關鍵字括號的想法:

// This works but is kind of weird 
#define MY_FUNCTION(aReturnType) (static) ##aReturnType MyFunction() { } 

有沒有更好的解決方案?

+3

空白吃飯是該操作員工作描述的一部分。 –

回答

8

我認爲你的問題是你不想在這裏使用令牌粘貼。如果你改變了宏

#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { } 

然後,如果你寫

MY_FUNCTION(bool) 

將擴大伸到

static bool MyFunction() { } 

我假設這是你想做的事,因爲我無法看到你想要將宏參數aReturnType粘貼到什麼上。

希望這會有所幫助!

+0

謝謝你的解釋。我在C++宏上有些生疏,忘記了我可以直接使用宏參數。 –

1

它應該怎麼做?你告訴它粘貼在一起staticbool。如果你不想要那個,你想static bool,那麼不要粘在一起