rad  3.0.0
getPayload.hpp
Go to the documentation of this file.
1 
9 #ifndef RAD_CORE_GETPAYLOAD_HPP_
10 #define RAD_CORE_GETPAYLOAD_HPP_
11 
12 #include <rad/anyEvent.hpp>
13 
14 namespace rad {
15 
28 template <typename EVENT>
29 typename EVENT::payload_t& GetPayload(AnyEvent& ev) {
30  if (typeid(ev) != typeid(EVENT)) {
31  throw IncorrectEventType("Wrong event type");
32  }
33  return static_cast<EVENT&>(ev).GetPayload();
34 }
35 
39 template <typename EVENT>
40 typename EVENT::payload_t const& GetPayload(AnyEvent const& ev) {
41  return GetPayload<EVENT>(const_cast<AnyEvent&>(ev));
42 }
43 
56 template <typename EVENT>
57 typename EVENT::payload_t* GetPayloadNothrow(AnyEvent& ev) {
58  if (typeid(ev) != typeid(EVENT)) {
59  return nullptr;
60  }
61  return &static_cast<EVENT&>(ev).GetPayload();
62 }
63 
67 template <typename EVENT>
68 typename EVENT::payload_t const* GetPayloadNothrow(AnyEvent const& ev) {
69  if (typeid(ev) != typeid(EVENT)) {
70  return nullptr;
71  }
72  return &static_cast<EVENT*>(const_cast<AnyEvent*>(&ev))->GetPayload();
73  // return GetPayloadNothrow<EVENT>(const_cast<AnyEvent&>(ev));
74 }
75 
76 } // namespace rad
77 #endif // #ifndef RAD_CORE_GETPAYLOAD_HPP_
rad::GetPayload
EVENT::payload_t & GetPayload(AnyEvent &ev)
Definition: getPayload.hpp:29
rad
Definition: actionCallback.hpp:21
rad::AnyEvent
Definition: anyEvent.hpp:52
rad::GetPayloadNothrow
EVENT::payload_t * GetPayloadNothrow(AnyEvent &ev)
Definition: getPayload.hpp:57
rad::IncorrectEventType
Definition: anyEvent.hpp:19