.[ ČeskéHry.cz ].

Laboratoř ČeskýchHer.cz - PasteBin

Vložit nový kód

ČeskéHry.cz - KOMUNITA HERNÍCH VÝVOJÁŘŮ

  1. Ladis
    17 dní
  2. 4dp
    29 dní
  3. signal slot v C++11
    84 dní
  4. ondra[sej]
    255 dní
  5. bez titulku
    263 dní
  6. bez titulku
    358 dní
  7. 4Vriskal
    436 dní
  8. Jatro
    452 dní
  9. 4destruct
    461 dní
  10. 4destruct
    462 dní
Link: http://nopaste.ceske-hry.cz/223399
Zaslal: signal slot v C++11
Popis: signal slot v C++11
Jazyk: C++
Vloženo: 30.11.2011, 20:42
Stáhnout jako soubor
  1. template<typename ... P>
  2. class FunctionCall
  3. {
  4. public:
  5. virtual void call(P...par)=0;
  6. };
  7.  
  8. template<typename T, typename ... P>
  9. class FunctionCallT : public FunctionCall<P...>
  10. {
  11. T *o;
  12. void (T::*f)(P...);
  13. public:
  14. FunctionCallT(T &obj, void (T::*fun)(P...))
  15. {
  16. o = &obj;
  17. f = fun;
  18. }
  19. void call(P...par)
  20. {
  21. (o->*f)(par...);
  22. }
  23. };
  24.  
  25. template <typename...P>
  26. class Signal
  27. {
  28. map<void *,unique_ptr<FunctionCall<P...>>> cal;
  29. public:
  30. template<typename T>
  31. void connect(T &o, void (T::*f)(P...))
  32. {
  33. cal[&o] = unique_ptr<FunctionCallT<T, P...>>(new FunctionCallT<T, P...>(o, f));
  34. }
  35. void disconnect(void *o)
  36. {
  37. cal.erase(o);
  38. }
  39. void operator()(P...par)
  40. {
  41. for(auto &i : cal)
  42. i.second->call(par...);
  43. }
  44. };
  45.