11 * @brief オブジェクトがスコープを抜ける際に、コンストラクタで渡された関数を実行するクラス
17 * auto finalizer = util::make_finalizer([] { std::cout << "finally" << std::endl; });
18 * std::cout << "do something" << std::endl;
21 * この場合、func()が終了する際に"finally"と表示される。
25 template <std::invocable Func>
28 explicit Finalizer(const Func &func) noexcept
32 explicit Finalizer(Func &&func) noexcept
33 : func_{ std::move(func) }
42 Finalizer(const Finalizer &) = delete;
43 void operator=(const Finalizer &) = delete;
44 Finalizer(Finalizer &&) = delete;
45 void operator=(Finalizer &&) = delete;
52 * @brief Finalizerオブジェクトを生成するファクトリ関数
53 * @param func Finalizerオブジェクトのコンストラクタに渡す関数
55 template <typename Func>
56 [[nodiscard]] auto make_finalizer(Func &&func) noexcept
58 return Finalizer<std::decay_t<Func>>{ std::forward<Func>(func) };