Skip to content

Instantly share code, notes, and snippets.

@Gydo194
Created March 26, 2018 19:30
Show Gist options
  • Save Gydo194/32d605d5f19f5f16810f19895793b54f to your computer and use it in GitHub Desktop.
Save Gydo194/32d605d5f19f5f16810f19895793b54f to your computer and use it in GitHub Desktop.
C++ template Observer using function pointer callbacks
#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