我希望能够编写宏CONDITIONALFUNCTION
以便
CONDITIONALFUNCTION( FunctionName )
{
ConditionalExpression()
}
扩展为
bool FunctionName( const Arguments& args )
{
return ConditionalExpression();
}
这甚至可能吗?
我在SO上找到的最接近的是这个帖子:
Possible to define a function-like macro with a variable body?
除了在那个线程中,我还有一个额外的要求,即大括号内的“body”不是一个完整的有效C ++语句,而是一个表达式(有效地)包含在'if'语句中。
请假设我已经知道这可能是不可能的,而且几乎肯定是愚蠢和邪恶的:)
答案 0 :(得分:1)
我会假设你有一个很好的理由首先使用宏......
使用您提供的问题的语法是不可能的。
最接近可行的宏语法是:
#define CONDITIONALEXPRESSION(f, c) \
bool f( const Arguments& args ) \
{ return c; }
CONDITIONALEXPRESSION(FunctionName, ConditionalExpression())
这将扩展到问题
中的扩展功能答案 1 :(得分:0)
是否有任何理由必须在宏中定义函数体?在Microsoft C ++中,像ASSERT()
这样的宏分别定义实际函数,然后从宏中引用它。
因此,函数总是被定义,但宏等于调用函数或者根本没有。
除此之外,对于C ++,我可能会使用内联函数。
答案 2 :(得分:0)
je4d已经提供了一种替代方案。我还有其他一些变化:
#define CONDITIONALEXPRESSION(f) \
bool f( const Arguments& args )
#define CONDITIONALRETURN(c) \
return (c)
CONDITIONALEXPRESSION(FunctionName)
{
CONDITIONALRETURN(ConditionalExpression())
}