Toolbox
snapshot
The Reactive C++ Toolbox
Loading...
Searching...
No Matches
toolbox
util
Finally.hpp
Go to the documentation of this file.
1
// The Reactive C++ Toolbox.
2
// Copyright (C) 2013-2019 Swirly Cloud Limited
3
// Copyright (C) 2021 Reactive Markets Limited
4
//
5
// Licensed under the Apache License, Version 2.0 (the "License");
6
// you may not use this file except in compliance with the License.
7
// You may obtain a copy of the License at
8
//
9
// http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing, software
12
// distributed under the License is distributed on an "AS IS" BASIS,
13
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
// See the License for the specific language governing permissions and
15
// limitations under the License.
16
17
#ifndef TOOLBOX_UTIL_FINALLY_HPP
18
#define TOOLBOX_UTIL_FINALLY_HPP
19
20
#include <utility>
21
22
namespace
toolbox
{
23
inline
namespace
util {
24
25
template
<
typename
FnT>
26
class
Finally
{
27
static_assert
(std::is_nothrow_invocable_v<FnT>);
28
29
public
:
30
explicit
Finally
(
FnT
fn)
noexcept
31
: fn_{std::move(fn)}
32
{
33
}
34
~Finally
() { fn_(); }
35
// Copy.
36
Finally
(
const
Finally
&) =
delete
;
37
Finally
&
operator=
(
const
Finally
&) =
delete
;
38
39
// Move.
40
Finally
(
Finally
&&)
noexcept
=
default
;
41
Finally
&
operator
=(
Finally
&&)
noexcept
=
delete
;
42
43
private
:
44
FnT
fn_;
45
};
46
47
template
<
typename
FnT
>
48
auto
make_finally
(
FnT
fn)
noexcept
49
{
50
return
Finally<FnT>
{std::move(fn)};
51
}
52
53
}
// namespace util
54
}
// namespace toolbox
55
56
#endif
// TOOLBOX_UTIL_FINALLY_HPP
toolbox::Finally
Definition
Finally.hpp:26
toolbox::util::Finally::Finally
Finally(FnT fn) noexcept
Definition
Finally.hpp:30
toolbox::util::Finally::operator=
Finally & operator=(const Finally &)=delete
toolbox::util::Finally::Finally
Finally(const Finally &)=delete
toolbox::util::Finally::Finally
Finally(Finally &&) noexcept=default
toolbox::util::Finally::~Finally
~Finally()
Definition
Finally.hpp:34
toolbox::util::make_finally
auto make_finally(FnT fn) noexcept
Definition
Finally.hpp:48
toolbox::util::bind
constexpr auto bind() noexcept
Definition
Slot.hpp:92
toolbox
Definition
Benchmark.cpp:26
Generated by
1.9.8