First, let's define a class that others might want to observe:
struct Caller { typedef std::function< void() > Callback; void RegisterCallback( Callback const & callback ) { callbacks.push_back( callback ); } void Notify() const { std::for_each( callbacks.begin(), callbacks.end(), []( Callback const & callback ) { callback(); }); } std::vector< Callback > callbacks; };Next, a free function we want to be called:
void GlobalFunction() { std::cout << "GlobalFunction" << std::endl; }As well as a functor:
struct Functor { void operator()() { std::cout << "Functor" << std::endl; } };And finally, a member function on an observing class:
struct Observer { void Update() { std::cout << "Observer::Update" << std::endl; } };Hooking everything up:
Caller caller; Observer observer; caller.RegisterCallback( &GlobalFunction ); caller.RegisterCallback( Functor() ); caller.RegisterCallback( std::bind( &Observer::Update, observer ) ); caller.Notify();Gives the output we'd expect:
GlobalFunction Functor Observer::UpdateBut how could we implement an UnregisterCallback method on the Caller class? std::function is neither LessThanComparable nor EqualityComparable so storing them in a set (ordered or otherwise) won't work. Seems that Boost.Signals might be a better fit for this task.
3 comments:
Caesars Palace Resort Casino Scheduled To Open On - JeTHub
Caesars Palace Resort Casino in Las Vegas is 강원도 출장샵 scheduled to open on 춘천 출장안마 March 26, 경주 출장안마 2020. Caesars Entertainment 세종특별자치 출장샵 announced on Wednesday 순천 출장안마 that
1xbet | 1xbet | Bet with a Bonus - RMC | Riders Casino
1XBet allows you https://deccasino.com/review/merit-casino/ to 바카라 bet on any favourite 1xbet 먹튀 horse races or any other https://jancasino.com/review/merit-casino/ sporting event. ✓ Get up to £300 + 200 Free Spins ventureberg.com/ No Deposit
Casinos in Malta - Filmfile Europe
Find the best Casinos communitykhabar in Malta including poormansguidetocasinogambling.com bonuses, games, games and wooricasinos.info the history of games. We filmfileeurope.com cover all the main reasons to visit Casinos in
Post a Comment