OGLplus  (0.59.0) a C++ wrapper for rendering APIs

protected_member.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_PROTECTED_MEMBER_HPP
10 #define EAGINE_PROTECTED_MEMBER_HPP
11 
12 #include "type_identity.hpp"
13 #include <utility>
14 
15 namespace eagine {
16 
19 template <typename T, typename Selector = type_identity<T>>
21 public:
23  auto get_the_member(Selector = Selector()) noexcept -> T& {
24  return _member;
25  }
26 
28  auto get_the_member(Selector = Selector()) const noexcept -> const T& {
29  return _member;
30  }
31 
32 protected:
33  template <typename... P>
34  protected_member(P&&... p)
35  : _member(std::forward<P>(p)...) {}
36 
37 private:
38  T _member;
39 };
40 
44 template <typename Selector, typename T>
45 static inline auto get_member(
47  Selector selector = Selector()) noexcept -> T& {
48  return pm.get_the_member(selector);
49 }
50 
54 template <typename Selector, typename T>
55 static inline auto get_member(
57  Selector selector = Selector()) noexcept -> const T& {
58  return pm.get_the_member(selector);
59 }
60 
61 } // namespace eagine
62 
63 #endif // EAGINE_PROTECTED_MEMBER_HPP
Common code is placed in this namespace.
Definition: eagine.hpp:21
Template used to construct tag-types used mostly in tag-dispatching.
Definition: selector.hpp:21
static auto get_member(const protected_member< T, Selector > &pm, Selector selector=Selector()) noexcept -> const T &
Returns a const reference to the member stored in protected_member.
Definition: protected_member.hpp:55
static auto get_member(protected_member< T, Selector > &pm, Selector selector=Selector()) noexcept -> T &
Returns a reference to the member stored in protected_member.
Definition: protected_member.hpp:45
auto get_the_member(Selector=Selector()) const noexcept -> const T &
Returns a const reference to the stored member.
Definition: protected_member.hpp:28
Class holding a single tagged data member.
Definition: protected_member.hpp:20
auto get_the_member(Selector=Selector()) noexcept -> T &
Returns a reference to the stored member.
Definition: protected_member.hpp:23

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).