LoginSignup
0
4

More than 5 years have passed since last update.

c++11のlambdaでイベントハンドラ

Posted at

jsっぽいイベントハンドラがけっこう短いコードで実現できる。

#include <iostream>
#include <functional>
#include <string>
#include <map>
#include <vector>

using namespace std;

struct Event {
    Event(const string& name, int data)
        : name(name),
          data(data) {
    }

    string name;
    int data;
};

typedef function<bool(const Event&)> EventHandler;

int main(int argc, char **argv) {
    // set evnet queues
    vector<Event> queues;
    queues.emplace_back("hoge", 100);
    queues.emplace_back("hoge", 101);

    // set handlers
    multimap<string, EventHandler> handlers;

    handlers.emplace("hoge", [](const Event& e) {
            cout << "emit hoge event!!!" << e.data << endl;
            return true;
        });

    handlers.emplace("moge", [](const Event& e) {
            cout << "emit moge event!!!" << e.data << endl;
            return true;
        });

    // trigger 
    for (auto event : queues) {
        for (auto iter : handlers) {
            if (event.name == iter.first) {
                iter.second(event);
            }
        }
    }

    return 0;
}
0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4