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
template<typename ... P> class FunctionCall { public: virtual void call(P...par)=0; }; template<typename T, typename ... P> class FunctionCallT : public FunctionCall<P...> { T *o; void (T::*f)(P...); public: FunctionCallT(T &obj, void (T::*fun)(P...)) { o = &obj; f = fun; } void call(P...par) { (o->*f)(par...); } }; template <typename...P> class Signal { map<void *,unique_ptr<FunctionCall<P...>>> cal; public: template<typename T> void connect(T &o, void (T::*f)(P...)) { cal[&o] = unique_ptr<FunctionCallT<T, P...>>(new FunctionCallT<T, P...>(o, f)); } void disconnect(void *o) { cal.erase(o); } void operator()(P...par) { for(auto &i : cal) i.second->call(par...); } };
© 2006 Michal Tuláček, Syntax Highlight - GeSHi (thx bref)
