rad  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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_
EVENT::payload_t & GetPayload(AnyEvent &ev)
Definition: getPayload.hpp:29
EVENT::payload_t * GetPayloadNothrow(AnyEvent &ev)
Definition: getPayload.hpp:57