2012-12-12 43 views
1

我希望能寫一個宏CONDITIONALFUNCTION,使C++宏擴展到函數體

CONDITIONALFUNCTION(FunctionName) 
{ 
    ConditionalExpression() 
} 

擴展到

bool FunctionName(const Arguments& args) 
{ 
    return ConditionalExpression(); 
} 

這甚至可能嗎?

我可以找到關於SO最接近的是這個線程:

Possible to define a function-like macro with a variable body?

只是不像在該線程,我有額外的要求,即「身體」的括號內是不是一個完整有效的C++聲明,而是將一個表達式(有效地)包含在'if'語句中。

請假設我已經知道這是不可能的,而且幾乎肯定愚蠢和邪惡的:)

回答

1

我會假設你已經有了一個很好的理由擺在首位使用宏...

這是不可能的,你有這個問題給出的語法。

最接近可行的宏觀語法是:

#define CONDITIONALEXPRESSION(f, c) \ 
bool f(const Arguments& args) \ 
{ return c; } 

CONDITIONALEXPRESSION(FunctionName, ConditionalExpression()) 

這將擴大到一樣的擴展功能在

+0

是的,這是我已經能夠想到的最好的。好,謝謝! – DSII

0

有爲什麼函數體必須在宏定義的任何原因?在Microsoft C++中,像ASSERT()這樣的宏分別定義了實際的函數,然後從宏中引用它。

所以這個函數總是被定義的,但是宏或者等於調用函數或者什麼也不是。

除此之外,對於C++我可能會使用內聯函數。

0

je4d已經提供了一個替代的問題。我在一些其他的變化:

#define CONDITIONALEXPRESSION(f) \ 
bool f(const Arguments& args) 

#define CONDITIONALRETURN(c) \ 
return (c) 

CONDITIONALEXPRESSION(FunctionName) 
{ 
    CONDITIONALRETURN(ConditionalExpression()) 
}