我有一个带有多个参数的成员函数。我想将其绑定到特定的对象实例并将其传递给另一个函数。我可以用占位符来做到这一点:
// actualInstance is a MyClass*
auto callback = bind(&MyClass::myFunction, actualInstance, _1, _2, _3);
但这有点笨拙 - 首先,当参数数量发生变化时,我也必须更改所有绑定调用。但此外,当我真正想要的是方便地创建一个包含对象引用的“函数指针”时,输入所有占位符是相当乏味的。
所以我希望能够做的是这样的:
auto callback = objectBind(&MyClass::myFunction, actualInstance);
有谁知道一些好方法来做到这一点?
我认为这会起作用:
template<typename R, typename C, typename... Args>
std::function<R(Args...)> objectBind(R (C::* func)(Args...), C& instance) {
return [=](Args... args){ return (instance.*func)(args...); };
}
then:
auto callback = objectBind(&MyClass::myFunction, actualInstance);
注意:您需要重载来处理 CV 限定的成员函数。 IE:
template<typename R, typename C, typename... Args>
std::function<R(Args...)> objectBind(R (C::* func)(Args...) const, C const& instance) {
return [=](Args... args){ return (instance.*func)(args...); };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)