fsm
include
fsmpp17
access_context.h
Go to the documentation of this file.
1
12
#pragma once
13
14
#include <tuple>
15
16
#include "../base/type_traits.h"
17
18
namespace
escad
19
{
20
21
template
<
class
C,
class
... D>
22
struct
access_context
final {
23
using
access_context_type
=
mpl::type_list
<C, D...>;
24
25
template
<
26
class
T,
27
class
= std::enable_if_t<T::template has<C> && (T::template has<D> && ...)>
28
>
29
access_context
(T& tuple_like) noexcept
30
: ctx_ {tuple_like.template get<C>(), tuple_like.template get<D>()...}
31
{
32
}
33
34
template
<
class
T>
35
T& get_context() noexcept {
36
return
std::get<T &>(ctx_);
37
}
38
39
template
<
class
T>
40
T
const
& get_context()
const
noexcept {
41
return
std::get<T &>(ctx_);
42
}
43
44
private
:
45
std::tuple<C &, D &...> ctx_;
46
};
47
51
template
<
class
C>
52
struct
access_context
<C> final {
53
using
access_context_type = C;
54
55
access_context
(C& c) noexcept
56
: ctx_ {c}
57
{
58
}
59
60
template
<
61
class
U,
62
class
= std::enable_if_t<U::template has<C>>
63
>
64
access_context
(U& tuple_like) noexcept
65
: ctx_ {tuple_like.template get<C>()}
66
{}
67
74
C&
get_context
() noexcept {
75
return
ctx_;
76
}
77
78
C
const
& get_context()
const
noexcept {
79
return
ctx_;
80
}
81
82
private
:
83
C& ctx_;
84
};
85
86
}
// namespace fsm
escad::access_context
Definition:
access_context.h:22
escad::access_context< C >::get_context
C & get_context() noexcept
Retrieve a context.
Definition:
access_context.h:74
escad
Definition:
compressed_pair.h:10
mpl::type_list
Alias template to facilitate the creation of named values.
Definition:
type_traits.h:142
Generated by
1.8.13