我正在创建一个输入管理器,它存储事件以及在事件发生时调用的相关方法(std::function<void()>
)。但是,在触发事件时可能会有多个事件要调用。存储事件的明显方法 - 函数配对将是linked list
,但由于可能存在多个函数,因此无效。我正在考虑只有linked list
存储std::function<void()>
数组作为元素。这是一种合适的使用方法,如果不是最安全的方法吗?
答案 0 :(得分:1)
将事件 - &gt;功能的映射存储在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
将为函数处理程序。