我需要一种语法,允许我使用先前的一些变量初始化来启动代码块,并且在执行代码块之后,我需要执行一些代码来释放一些其他变量。
所以在块内写的代码应该在其他一些操作中执行。
这是我得到的:
#define application(block) new Application(&argc, argv); auto __code= []() block ; __code(); mainApplication->launch()
您看到的代码只是初始化一个应用程序(一个C ++对象),所以我这样使用它:
application({
< write the code >
});
这样我确信应用程序始终初始化,并在块之后启动 但我想知道是否有办法远离圆括号,以便我可以这样写:
application{
< write the code >
};
这种方式也有效,但它应该使语法更轻。
答案 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
变量和循环应由优秀的编译器优化。