如何只传递绑定函数的第二个参数?

How to pass only second argument of a bind function?

我正在使用通用 EventEmitter 实例:

EventEmitter mEventHandler;

所以我定义了这个绑定:

function<void(int, double)> onSetMin = bind(&ILFO::SetMin, this, placeholders::_2);
mEventHandler.on(kParamID, onSetMin);

on 例如:

mEventHandler.emit(paramID, someInt, someDouble);

如前所述,即"generic",并设置2个参数。但是我的特定函数 SetMin 只需要一个参数(在这种情况下是 someDouble):

void ILFO::SetMin(double min);

你如何从 bind 传递第二个参数?

我认为使用 lambda 更容易解决您的问题:

function<void(int, double)> onSetMin = [this](int dummy, double d) { SetMin(d); };
mEventHandler.on(kParamID, onSetMin);

使用 lambda 代替 std::bind:

mEventHandler.on(kParamID, [this] (int, double value) {
    SetMin(value);
});

std::bind 的目的与您想要做的相反:它帮助您创建一个函数,该函数接受 N 个参数,而函数 f 接受 M其中 M > N 通过将 f 的一些参数固定为给定值(or/and 更改参数的顺序)。

根据 C++ 参考,在 std::bind 调用中您可以使用

unbound arguments replaced by the placeholders _1, _2, _3... of namespace std::placeholders

https://en.cppreference.com/w/cpp/utility/functional/bind

using namespace std::placeholders;  // for _1, _2, _3...
// demonstrates argument reordering and pass-by-reference
int n = 7;
// (_1 and _2 are from std::placeholders, and represent future
// arguments that will be passed to f1)
auto f1 = std::bind(f, _2, 42, _1)