Мне нужен синтаксис, который позволяет мне запускать блок кода с предыдущей инициализацией некоторых переменных, и после выполнения блока кода мне нужно выполнить некоторый код для освобождения некоторых других переменных.
Поэтому код, написанный внутри блока, должен выполняться в середине некоторых других операций.
Вот что я получил:
#define application(block) new Application(&argc, argv); auto __code= []() block ; __code(); mainApplication->launch()
Код, который вы видите, просто инициализирует приложение (объект C ++), поэтому я использую его следующим образом:
application({
< write the code >
});
Таким образом, я уверен, что приложение всегда инициализируется и запускается после блока.
Но мне интересно, есть ли способ избежать круглых скобок, чтобы я мог написать это так:
application{
< write the code >
};
Также этот способ работает, но он должен облегчить синтаксис.
Вы можете скрыть циклы 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
переменная и циклы должны быть оптимизированы хорошим компилятором.
Обратить проблему. Передайте объект с соответствующими переменными в код. Пусть деструктор каждой переменной очистится.