我想知道为什么以下给我一个错误:
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)
,它就可以了。我想知道bind1st
和bind
之间的技术差异导致后者在这种情况下起作用了吗?
答案 0 :(得分:4)
此函数从二进制文件构造一元函数对象 函数对象通过将其第一个参数绑定到固定值 X
(强调我的)
function object是一个应该用作函数的对象(即重载operator()
)。所以bind1st
不适用于自由函数。
当它被std::function
包裹时,它会起作用,因为它会变成一个函数 object 。
由于您只是学习这一点,请改用bind
。学习不赞成的界面毫无意义。