我创建了简单的基于回调的事件管理器并且它可以工作,但是我有一些零模板参数的错误。
class event_manager
{
public:
template <typename... T>
static void register_event(const unsigned long e, std::function<void(T...)> ec)
{
events.insert({ e, ec });
}
template <typename... T>
static void fire_event(const unsigned long e, T... args)
{
for (auto it : events)
{
if (it.first == e)
{
boost::any_cast<std::function<void(T...)>>(it.second)(args...);
}
}
}
private:
static std::unordered_multimap<unsigned int, boost::any> events;
};
我正在使用此代码添加回调:
event_manager::register_event<unsigned int>(DVU_EVENT_KEY_PRESSED, [](unsigned int key)
{
//Works!
});
event_manager::register_event(DVU_EVENT_IDLE, []()
{
//Could not deduce template argument
});
第二个问题:是否可以更改代码以删除<unsigned int>
类似模板规范?
例子:
event_manager::register_event(DVU_EVENT_KEY_PRESSED, [](unsigned int key){}));