我为游戏引擎创建事件管理器。 我有一些问题。
现在,我的程序可以像这样做:
RegCallback(E_EVSYS_MSG::MATHSQRT, &test_it, &test::bar, 10, 100.0);
RegCallback(E_EVSYS_MSG::MATHSQRT, &SomeCallback, 10.0f, 100);
CallEvent(E_EVSYS_MSG::MATHSQRT);
但是,它不对。 我用std :: bind中的参数存储函数:
std::function< void() > m_Func;
m_Func = std::bind(pmfn, ref, std::forward<ARGS>(data)...);
所以...我不知道如何分离存储函数ptr和参数。
它必须像这样工作:
RegCallback(E_EVSYS_MSG::MATHSQRT, &test_it, &test::bar);
RegCallback(E_EVSYS_MSG::MATHSQRT, &SomeCallback);
CallEvent(E_EVSYS_MSG::MATHSQRT, 10, 100.0);
如何实现这一目标? std :: bind返回模板化的std :: function,这很难将它保存在vector中。 基本上,所有回调仅在ptr与函数之间有所不同(它可能是方法或顺序函数)。并且所有回调都具有相同的参数(但参数中的数据不同)。
P.S测试程序的完整代码:http://pastebin.com/Rdyy5LGU