gpt4 book ai didi

c++ - 将 std::bind 成员函数绑定(bind)到对象实例的快捷方式,无需绑定(bind)参数

转载 作者:IT老高 更新时间:2023-10-28 23:18:02 29 4
gpt4 key购买 nike

我有一个带有多个参数的成员函数。我想将它绑定(bind)到特定的对象实例并将其传递给另一个函数。我可以用占位符做到这一点:

// actualInstance is a MyClass*
auto callback = bind(&MyClass::myFunction, actualInstance, _1, _2, _3);

但这有点笨拙——首先,当参数数量发生变化时,我也必须更改所有绑定(bind)调用。但此外,键入所有占位符非常繁琐,而我真正想要的是方便地创建一个包含对象引用的“函数指针”。

所以我想做的是:

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...); };
}

然后:

auto callback = objectBind(&MyClass::myFunction, actualInstance);

注意:您需要重载来处理 CV 限定的成员函数。即:

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...); };
}

关于c++ - 将 std::bind 成员函数绑定(bind)到对象实例的快捷方式,无需绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803112/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com