我有一个函数对象typedef std::function<bool(Event*)> Handler
。一个成员函数总是被分配给这个对象。所以,我使用std::bind
来实现这一点。上述如何创建std :: wrap的包装
Handler f = std::bind(&LevelSystem::switchLevel, this, std::placeholders::_1);
f(new Event("test"));
此代码按预期工作,但我想换行std::bind
在辅助功能更清晰的代码。这是我想出的。
template<class Func> inline Handler MemFn(Func &&f) {
return std::bind(f, this, std::placeholders::_1);
}
和使用将是:
Handler f = MemFn(&LevelSystem::switchLevel);
我使用此功能时得到一个错误:
No viable conversion from
'__bind<bool(LevelSystem::*&)(Event *), System *,std::__1::placeholders::__ph<1> &>' to
'Handler' (aka 'function<bool(Event *)>')
我不理解的错误。
什么是'this'内'MemFn'的背景? – 0x499602D2
作为LevelSystem的基类的系统。我改变了代码来接受LevelSystem;仍然不起作用 – Gasim
我通过将其作为单独的参数传递来解决此问题:'template inline Handler MemFn(Func && f,Sys * system){...}' –
Gasim