Created
March 26, 2018 19:30
-
-
Save Gydo194/32d605d5f19f5f16810f19895793b54f to your computer and use it in GitHub Desktop.
C++ template Observer using function pointer callbacks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef OBSERVER_H | |
#define OBSERVER_H | |
#include <vector> | |
#include <iostream> | |
using namespace std; | |
template<class T> | |
class Observer | |
{ | |
public: | |
Observer(); | |
~Observer(); | |
struct ObserverEventListener { | |
void (*callback)(T); | |
}; | |
vector<ObserverEventListener> listeners; | |
void attachListener(ObserverEventListener el); | |
void detachListener(ObserverEventListener el); | |
void event(T arg); | |
}; | |
template<class T> | |
Observer<T>::Observer() | |
{ | |
} | |
template<class T> | |
Observer<T>::~Observer() | |
{ | |
} | |
template<class T> | |
void Observer<T>::attachListener(Observer::ObserverEventListener el) | |
{ | |
listeners.push_back(el); | |
} | |
template<class T> | |
void Observer<T>::detachListener(Observer::ObserverEventListener el) | |
{ | |
//todo | |
cout << "WARNING: Observer::detachListener called, WIP nonfunctional function!" << endl; | |
} | |
template<class T> | |
void Observer<T>::event(T argument) { | |
for(uint16_t i = 0; i < listeners.size(); ++i) { | |
listeners.at(i).callback(argument); | |
} | |
} | |
#endif // OBSERVER_H |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment