| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #pragma once
- /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- *
- */
- /**
- * Basic std::function callback example. Templated on a function signature
- * that takes in a uint32_t and returns void.
- */
- struct myData {
- int myAge = 55;
- const char* pchar = "myData struct";
- enum en_sex { MALE, FEMALE, DIVERS } sex = MALE;
- };
- struct myOtherData : myData {
- int myOtherAge = 35;
- };
- /**
- * Alternative storage implementation. Perhaps you want to store
- * callbacks for different event types?
- */
- enum my_events_t
- {
- VIDEO_STOP = 0,
- VIDEO_START,
- VIDEO_PAUS,
- EVENT_MAX
- };
- /**
- * Alternative storage implementation. Perhaps you want to store
- * callbacks for different event types?
- */
- struct cb_event_t
- {
- std::function<void(myData)> cb;
- my_events_t event;
- };
- /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- *
- */
- /***********************************************************************************************************************
- * Dummy Client #1
- * Uses a static method for a callback.
- */
- class Client1
- {
- public:
- static void func(myData v)
- {
- printf("static member callback: %d\n", v.myAge);
- }
- };
- /***********************************************************************************************************************
- * Dummy Client #2
- * Uses an instance method as a callback
- */
- class Client2
- {
- public:
- void func(myData v) const
- {
- printf("instance member callback: %d\n", v.myAge);
- }
- };
- /***********************************************************************************************************************
- * Callback on a c function
- */
- extern "C"
- {
- static void c_client_callback(myData v)
- {
- printf("C function callback: %d\n", v.myAge);
- }
- }
- /**
- * Event based example. Constructed with a uint32_t.
- * Callbacks are passed this uint32_t.
- * Callbacks are only invoked when their event type matches the
- * occuring event.
- */
- class EventDriver
- {
- typedef std::function<void(myData)> cb_t;
- public:
- EventDriver() : callbacks_() {};
- // Register a callback.
- void register_callback(const cb_t& cb, const my_events_t event)
- {
- // add callback to end of callback list
- callbacks_.push_back({ cb, event });
- }
- /// Call all the registered callbacks.
- void callback(myData& val, my_events_t event) const
- {
- // my_events_t event = VIDEO_START;
- // iterate through callback list and call each one
- for (const auto& cb : callbacks_)
- {
- if (cb.event == event)
- {
- cb.cb(val);
- }
- }
- }
- private:
- /// Integer to pass to callbacks.
- // myData &val_ ;
- /// List of callback functions.
- std::vector<cb_event_t> callbacks_;
- };
|