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

时间:2013-10-13 06:36:32

标签: c++ c++11

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

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之间的技术差异导致后者在这种情况下起作用了吗?

1 个答案:

答案 0 :(得分:4)

bind1st

  

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

(强调我的)

function object是一个应该用作函数的对象(即重载operator())。所以bind1st不适用于自由函数。

当它被std::function包裹时,它会起作用,因为它会变成一个函数 object

由于您只是学习这一点,请改用bind。学习不赞成的界面毫无意义。