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

関数本体をマクロで定義する必要がある理由はありますか?Microsoft C ++では、のようなマクロASSERT()は実際の関数を個別に定義し、マクロからそれを参照するだけです。

したがって、関数は常に定義されますが、マクロは関数を呼び出すことと同じであるか、まったく何もありません。

それとは別に、C++の場合はおそらくインライン関数を使用します。

于 2012-12-12T00:53:32.433 に答える
0

je4dはすでに1つの選択肢を提供しています。私は他のいくつかのバリエーションを超えています:

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

#define CONDITIONALRETURN(c) \ 
return (c)

CONDITIONALEXPRESSION(FunctionName)
{
  CONDITIONALRETURN(ConditionalExpression())
}
于 2012-12-12T01:33:08.053 に答える