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 回答