gsl::finally{}使用方法

GSL 也提供給了一些有用的工具來幫助創建具有可靠性和可讀性的代碼。例如 gsl::finally{} API:

#define concat1(a,b) a ## b
#define concat2(a,b) concat1(a,b)
#define ___ concat2(dont_care, COUNTER)

#include <gsl/gsl>
#include

int main(void)
{
auto ___ = gsl::finally([]{
std::cout << “Hello World\n”;
});
}
// Hello World
gsl::finally{} 通過 C++ 析構函數的機制,提供了一種簡單的方式在函數退出之前執行代碼。對於需要在函數退出前執行清理過程非常有用。更有用的地方是對於存在異常的時候,一旦代碼中有異常,一些清理的代碼可能就忘記了,但是隻要 gsl::finally{} 是在異常前面的定義的,發生異常後,仍然會執行相應的代碼。

在上面的代碼中,還包含了一個宏,允許使用 __ 定義 gsl::finally{} 的名字。使用 gsl::finally{} 必須存儲 gsl::finally{} 對象才能在退出函數的時候執行析構函數。那就必須給 gsl::finally{} 起一個名字,但這非常笨重,也沒有意義。顯然,不會有代碼去調用 gsl::finally{} 對象。這個宏提供了一個簡單方式去表達了“我不關心變量的名字”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章