Boost.ScopeExitは、ローカル関数のように見えますが、名前を持っていない何かを定義するために使用できるマクロBOOST_SCOPE_EXITを提供しています。しかし、それは括弧内のパラメータリストと括弧内のブロックを持っています。
#include < ストリング > の#include <メモリ> の#include <cstdioを> 構造体CLOSEFILE { ボイド演算子()(STD ::ファイル*のファイル){ のstd :: FCLOSE(ファイル)。 } }。ボイド write_to_file(CONSTのstd :: 文字列&S){ のstd :: unique_ptrを <はstd :: FILE、CLOSEFILE>ファイル(STD ::のfopen(" ハローworld.txt "、" A " )); std ::関数fprintf(。ファイルを取得()、s.c_str()); } int型のmain(){ write_to_file( " こんにちは、" ); write_to_file(" 世界!" ); リターン 0 ; }
上記のコードは次のように変更、BOOST_SCOPE_EXITを使用しています。
書式#include < 文字列 > の#include <メモリ> 書式#include <cstdioを> する#include <ブースト/ scope_exit.hpp> 無効 write_to_file(のconstのstd :: 文字列&S){ のstd ::ファイル *ファイル=ののfopen(" こんにちは、世界。 TXT " " A " ); BOOST_SCOPE_EXIT(およびファイル) { のstd :: FCLOSE(ファイル)。 } BOOST_SCOPE_EXIT_ENDの STD ::関数fprintf(ファイル、s.c_str())。 } int型のmain(){ write_to_file(" こんにちは" ); write_to_file(" 世界!" ); リターン 0 ; }