Skip to content

Instantly share code, notes, and snippets.

@l4es
Forked from sansumbrella/EventDispatcher.cpp
Created January 2, 2018 06:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save l4es/1bd6542a8c6524d1fd2d9d70e68a58c6 to your computer and use it in GitHub Desktop.
Save l4es/1bd6542a8c6524d1fd2d9d70e68a58c6 to your computer and use it in GitHub Desktop.
C++ observer pattern for event handling.
#include "EventDispatcher.h"
void EventDispatcher::addListener( Listener *l )
{
mListeners.push_back(l);
}
void EventDispatcher::removeListener( Listener *l )
{
mListeners.erase( std::remove( mListeners.begin(), mListeners.end(), l ), mListeners.end() );
//having toruble with the rmove function...
}
void EventDispatcher::dispatchEvent()
{
for( std::vector<Listener*>::iterator listener = mListeners.begin(); listener != mListeners.end(); ++listener )
{
(*listener)->handleEvent();
}
}
#include "Listener.h"
#include <stdio.h>
#include <vector>
#include <algorithm>
class EventDispatcher {
public:
void addListener( Listener* );
void removeListener( Listener* );
protected:
std::vector<Listener*> mListeners;
virtual void dispatchEvent();
};
typedef std::vector<Button>::iterator ButtonIter;
MenuState::MenuState(): mButtonListener(this)
{
for( int i = 0; i != 10; i++ )
{
mPreferences.push_back( Button(i) );
}
//add listeners
for( ButtonIter b = mPreferences.begin(); b != mPreferences.end(); b++ )
{
b->addListener( &mButtonListener );
}
}
#include "EventDispatcher.h"
class MenuState : public AppState
{
public:
MenuState();
private:
std::vector<Button> mButtons;
// Event Listeners
// Buttons
class ButtonListener : public Listener
{
PrefListState* parent;
public:
ButtonListener( PrefListState* p ){ parent = p; }
void handleEvent( int ID )
{
std::cout << "Button Pressed: " << ID << std::endl;
}
} mButtonListener;
};
class Listener
{
public:
virtual void handleEvent(){}
virtual void handleEvent( int ID ){}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment