簡體   English   中英

聲明使用宏的運算符

[英]Declaring operators using macros

#define DECLARE_GLOBAL_OPERATOR(OPERATOR) \
X OPERATOR(const X &, const X &);

struct X {};
DECLARE_GLOBAL_OPERATOR(operator+);

上面的代碼聲明了一個直覺期望的全局加法運算符,但是一個簡單的變體(宏僅接受該運算符)在Clang 3.5.0和ideone上不起作用(使用C ++ 11測試)。

#define DECLARE_GLOBAL_OPERATOR(SYMBOL) \
X operator##SYMBOL(const X &, const X &);

struct X {};
DECLARE_GLOBAL_OPERATOR(+);

在此,Clang抱怨說pasting formed 'operator+', an invalid preprocessing token而ideone輸出pasting "operator" and "+" does not give a valid preprocessing token 此代碼格式錯誤嗎?

請注意,下面的代碼可以編譯並執行良好,因此問題似乎與將+-x/參數傳遞給宏無關。

#define WHATEVER(SYMBOL) \
int value = 2 SYMBOL 4;

說它聲明一個全局運算符比實際定義它更准確。 關鍵字是operator ,而運算符是單獨的標記。 而且,您只能將標識符粘貼在一起,而不能將標識符和操作員符號粘貼在一起。

因此,您可以通過刪除##來獲得第二個版本:

#define DEFINE_GLOBAL_OPERATOR(SYMBOL) \
            X operator SYMBOL(const X &, const X &);

struct X {};
DEFINE_GLOBAL_OPERATOR(+);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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