0

我正在创建一个输入管理器,它存储了事件,以及std::function<void()>在事件发生时调用的相关方法 ( )。但是,触发事件时可能会调用多个事件。存储事件-函数配对的明显方式是 a linked list,但由于可能有多个函数,这将不起作用。我正在考虑linked list将数组存储std::function<void()>为元素。这是一种合适的方法吗?如果不是,最安全的方法是什么?

4

1 回答 1

1

将 Event->Function 的映射存储在 a 中multimap,它可以存储具有重复键的键/值组合。

std::multimap<Event, std::function<void()>> events_;

触发事件时,您可以找到所有事件处理程序的列表,使用equal_range该列表返回std::pair所有事件处理函数的迭代器。调用其中的每一个来处理事件,例如(未经测试的代码)

void on_event(Event const &e) {
  for (auto r = events_.equal_range(e); r.first != r.second; ++r.first)
    r.first->second();
}

equal_range返回一对迭代器,因此在两者之间循环。在循环的每次迭代中,迭代器 (r.first) 指向一个键/值对。r.first->first将是e并且r.first->second将是函数处理程序。

于 2013-07-24T09:17:03.107 回答