为什么 std::bind1st 不适用于自由函数

Why doesn't std::bind1st work on free functions?

本文关键字:自由 函数 适用于 bind1st std 为什么 不适用      更新时间:2023-10-16

我想知道为什么以下内容会给我一个错误:

bool is_divisible(int by, int n)
{
    return (n % by) == 0;
}
int main()
{
    vector<int> v {1, 2, 3, 4, 5};
    cout << count_if(v.begin(), v.end(), bind1st(is_divisible, 2)) << endl;
}

但是,如果我使用 bind(is_divisible, 2, _1) ,它可以工作。我想知道bind1stbind之间的技术差异是什么,导致后者在这种情况下起作用?

bind1st:

此函数从二进制构造一元函数对象 函数对象 op 通过将其第一个参数绑定到固定值 十.

(强调我的)

函数

对象是应该用作函数的对象(即重载operator())。所以bind1st不应该使用自由函数。

当被std::function包装时,它可以工作,因为它随后成为函数对象

由于您只是在学习这个,请改用bind。学习已弃用的界面毫无意义。