2

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

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导致后者在这种情况下工作?

4

1 回答 1

4

绑定1st

此函数通过将其第一个参数绑定到固定值 x,从二元函数对象op 构造一元函数对象。

(强调我的)

函数对象是应该用作函数的对象(即重载)operator()。所以bind1st不应该使用免费功能。

它在被包装时起作用,std::function因为它变成了一个函数对象

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

于 2013-10-13T06:48:56.977 回答