以下は#define
部分的に機能します。
#define OUT(x) \
if(x > 0) cout << "Hello "; \
if(x > 1) cout << x+1
OUT(1) << "message"; // OK
if(0) {
OUT(1) << "message"; // OK, nothing printed
}
if(0)
OUT(1) << "message"; // NO, printed anyway
なぜ機能しないのか理解しています(のみif(0)
に適用されますif(x > 0)
)。
それを機能させる方法が見つかりません。定義に中括弧を入れることができないことを考慮してください。そうしないと、挿入演算子を使用できなくなります。