1

我希望能够编写一个宏CONDITIONALFUNCTION,以便

CONDITIONALFUNCTION( FunctionName )
{
    ConditionalExpression()
}

扩展到

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

这甚至可能吗?

我能在 SO 上找到的最接近的是这个线程:

可以用变量体定义类似函数的宏吗?

除了与该线程不同,我还有一个额外的要求,即大括号内的“主体”不是完整有效的 C++ 语句,而是要(有效)包装在“if”语句中的表达式。

请假设我已经知道这可能是不可能的,而且几乎可以肯定是愚蠢和邪恶的 :)

4

3 回答 3

1

我将假设您首先有充分的理由使用宏...

您在问题中给出的语法是不可能的。

最接近的可行宏语法是:

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

CONDITIONALEXPRESSION(FunctionName, ConditionalExpression())

这将扩展为与问题中的扩展功能相同

于 2012-12-12T00:58:21.840 回答
0

je4d 已经提供了一种替代方案。我超过了其他一些变化:

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

#define CONDITIONALRETURN(c) \ 
return (c)

CONDITIONALEXPRESSION(FunctionName)
{
  CONDITIONALRETURN(ConditionalExpression())
}
于 2012-12-12T01:33:08.053 回答
0

为什么必须在宏中定义函数体?在 Microsoft C++ 中,宏就像ASSERT()单独定义实际函数,然后从宏中引用它。

所以函数总是被定义,但宏要么等于调用函数,要么什么都没有。

除此之外,对于 C++,我可能会使用内联函数。

于 2012-12-12T00:53:32.433 回答