1

いくつかの変数を事前に初期化してコードのブロックを起動できる構文が必要です。コードのブロックが実行された後、他の変数の割り当てを解除するためにいくつかのコードを実行する必要があります。
したがって、ブロック内に記述されたコードは、他のいくつかの操作の途中で実行する必要があります。

これが私が得たものです:

#define application(block) new Application(&argc, argv); auto __code= []() block ; __code(); mainApplication->launch()

表示されているコードは、アプリケーション(C ++オブジェクト)を初期化するだけなので、次のように使用します。

application({
    < write the code >
});

このようにして、アプリケーションは常に初期化され、ブロック後に起動されると確信しています。
しかし、私がこのように書くことができるように、丸括弧を遠ざける方法があるかどうか疑問に思います:

application{
    < write the code >
};

この方法も機能しますが、構文が軽くなるはずです。

4

2 に答える 2

4

問題を逆転させます。関連する変数を持つオブジェクトをコードに渡します。各変数のデストラクタをクリーンアップします。

于 2012-10-13T23:03:29.860 に答える
3

これを実現するために、マクロでforループを非表示にすることができます。

このマクロを呼び出した後にブロック(または単一のステートメント)を呼び出すと、declそのブロックをスコープとして宣言が挿入され、ブロックのpreexpr前後で評価されpostexprます。

#define LET(decl, preexpr, postexpr) \
    for (int _loop = 1; _loop;) \
        for (decl; _loop && (preexpr, 1); postexpr, _loop = 0)

これはCですが、C++でも機能するはずです。もちろん、マクロの使用は通常、悪いC++スタイルと見なされます。変数とループは_loop、優れたコンパイラーによって最適化する必要があります。

于 2012-10-14T09:54:52.310 に答える