在执行块之前和之后执行一些指令

时间:2012-10-13 22:52:12

标签: c++ block c-preprocessor auto

我需要一种语法,允许我使用先前的一些变量初始化来启动代码块,并且在执行代码块之后,我需要执行一些代码来释放一些其他变量。
所以在块内写的代码应该在其他一些操作中执行。

这是我得到的:

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

您看到的代码只是初始化一个应用程序(一个C ++对象),所以我这样使用它:

application({
    < write the code >
});

这样我确信应用程序始终初始化,并在块之后启动 但我想知道是否有办法远离圆括号,以便我可以这样写:

application{
    < write the code >
};

这种方式也有效,但它应该使语法更轻。

2 个答案:

答案 0 :(得分:4)

反转问题。将带有相关变量的对象传递给代码。让每个变量的析构函数清理。

答案 1 :(得分: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变量和循环应由优秀的编译器优化。