fsm
contexts.h
Go to the documentation of this file.
1 
12 #pragma once
13 
14 #include <tuple>
15 
16 namespace escad
17 {
18 
26 template<class... T> struct contexts {
30  explicit contexts(T&... ctxs) noexcept
31  : contexts_ {ctxs...}
32  {
33  }
34 
38  template<class U>
39  auto& get() noexcept {
40  return std::get<std::add_lvalue_reference_t<U>>(contexts_);
41  }
42 
46  template<class U>
47  auto const& get() const noexcept {
48  return std::get<std::add_lvalue_reference_t<U>>(contexts_);
49  }
50 
51  template<class U>
52  static auto constexpr has = mpl::type_list_contains_v<mpl::type_list<T...>, U>;
53 
54 private:
55  std::tuple<T&...> contexts_;
56 };
57 
58 } // namespace fsm
contexts(T &... ctxs) noexcept
Capture different Context types as references.
Definition: contexts.h:30
Definition: compressed_pair.h:10
A set of references to different context types.
Definition: contexts.h:26
Alias template to facilitate the creation of named values.
Definition: type_traits.h:142