Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
Deferred.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4#include "../Foundation/Compiler.h"
5
6namespace SC
7{
10
16template <typename F>
18{
20 Deferred(F&& f) : f(forward<F>(f)) {}
21
24 {
25 if (armed)
26 f();
27 }
28
30 void disarm() { armed = false; }
31
32 private:
33 F f;
34 bool armed = true;
35};
36
39template <typename F>
41{
42 return Deferred<F>(forward<F>(f));
43}
44
46} // namespace SC
constexpr T && forward(typename TypeTraits::RemoveReference< T >::type &value)
Forwards an lvalue or an rvalue as an rvalue reference.
Definition Compiler.h:260
Deferred< F > MakeDeferred(F &&f)
Creates a Deferred object holding a function that will be invoked at end of current scope.
Definition Deferred.h:40
Executes a function at end of current scope (in the spirit of Zig defer keyword).
Definition Deferred.h:18
Deferred(F &&f)
Constructs Deferred object with a functor F.
Definition Deferred.h:20
void disarm()
Disarms the Deferred object, preventing function invocation on destruction.
Definition Deferred.h:30
~Deferred()
Invokes the function F upon destruction, if disarm() has not been previously called.
Definition Deferred.h:23