2012-10-13 64 views
1

我需要一種語法,它允許我用一些變量的前面的初始化來啓動一段代碼,並且在代碼塊被執行後,我需要執行一些代碼來釋放一些其他變量。
因此,在塊內寫入的代碼應該在其他一些操作的中間執行。在執行塊之前和之後執行一些指令

這裏是我的了:

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

,你看到的只是初始化一個應用程序(C++對象),所以我使用這種方式的代碼:

application({ 
    < write the code > 
}); 

這樣我確保應用程序始終被初始化,並在塊後啓動。
但我不知道是否有繼續走圓括號,這樣我就可以這樣寫道:

application{ 
    < write the code > 
}; 

而且這樣的作品,但它應該做的語法輕。

+2

這是一些非常可怕的宏觀濫用? – Mysticial

+0

如果你想要一個不同於C++的語法,爲什麼你不使用其他語言?例如你可以從你的語法編寫你自己的翻譯到C++。濫用相當弱的C++宏功能可能是一種不正確的方法。 – Vlad

回答

3

您可以隱藏宏中的for-loops來實現此目的。

調用這個宏,跟着塊(或單語句),將插入聲明decl與塊作爲其範圍和塊後評估preexprpostexpr

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

這是C但也應該用C++工作;當然,使用宏通常被認爲是不好的C++風格。應該通過一個好的編譯器對_loop變量和循環進行優化。

4

反轉問題。將相關變量的對象傳遞給代碼。讓每個變量的析構函數清理乾淨。

相關問題