You.i Engine
YiSignalEmitEvent.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_SIGNAL_EMIT_EVENT_H_
3 #define _YI_SIGNAL_EMIT_EVENT_H_
4 
5 #ifndef _YI_SIGNAL_H_
6 #error "Do not include YiSignalEmitEvent.h directly. Include YiSignal.h or YiSignalBaseEmitEvent.h instead."
7 #endif
8 
10 #include "utility/YiTypeTraits.h"
11 
24 template<typename... SignalTypes>
25 class CYISignalEmitEvent : public CYISignalBaseEmitEvent
26 {
27 public:
28  CYISignal<SignalTypes...> Signal;
29 
30  CYISignalEmitEvent(const SignalTypes &... args) :
31  m_args(args...)
32  {
33  }
34 
35  virtual void Emit() override
36  {
37  Emit(typename YiMakeIndexSequence<sizeof...(SignalTypes)>::type());
38  }
39 
40 private:
41  template<int... S>
42  inline void Emit(YiIndexSequence<S...>)
43  {
44  Signal.Emit(std::get<S>(std::move(m_args))...);
45  }
46 
47  std::tuple<typename std::remove_reference<SignalTypes>::type...> m_args;
48 };
49 
54 #endif /* _YI_SIGNAL_EMIT_EVENT_H_ */
Definition: YiTypeTraits.h:506
Signals and slots are a thread-safe and flexible communication framework that will allow various obje...
Definition: YiSignal.h:164