"inverse" 在 C++ 中通过丢弃参数进行绑定

"inverse" bind by discarding parameters in c++

std::bind 通过将剩余参数设置为预设值来减少函数采用的参数数量。是否还有通过丢弃参数来增加参数数量的函数?

例如,要创建一个从类型为 function<void()>function 获取 int 的函数,可以使用 lambda 来实现,如下所示:

[=](int){function();}

所以不用辅助函数也很容易做到,但是std::bind也是一样。

标准中有这样的内容吗?

我为什么要问这个

我可以用

[](){function(3);}

3绑定到函数的参数上。但我发现这段代码的可读性较差(至少对于了解绑定的人而言)。在我使用 bind 的那一刻,我的意图就很明确了。我想知道这是否也适用于 "inverse" 绑定。

你的前提是错误的。 bind的目的是而不是减少参数个数。绑定表达式的调用参数个数与绑定函数的参数个数本质上是无关的。事实上,您可以使用任意数量的参数调用绑定表达式(但至少与占位符一样多)。

例如,考虑:

int f(int, int);

auto g = std::bind(f, std::bind(f, _1, _2), std::bind(f, _2, _3));

这定义了g(x, y, z) := f(f(x, y), f(y, z))