为什么 std::bind1st 不适用于自由函数
Why doesn't std::bind1st work on free functions?
我想知道为什么以下内容会给我一个错误:
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
之间的技术差异是什么,导致后者在这种情况下起作用?
bind1st:
此函数从二进制构造一元函数对象 函数对象 op 通过将其第一个参数绑定到固定值 十.
(强调我的)
函数对象是应该用作函数的对象(即重载operator()
)。所以bind1st
不应该使用自由函数。
当被std::function
包装时,它可以工作,因为它随后成为函数对象。
由于您只是在学习这个,请改用bind
。学习已弃用的界面毫无意义。
相关文章:
- 将自由函数绑定为类成员函数
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 为什么成员函数地址离自由函数这么远?
- 如何使用模板元编程在自由函数C++链接两个不相关的类
- C++ 20 中的运算符 == 和 <=> 应该作为成员还是自由函数实现?
- 如何在共享库中保留静态库中的自由函数
- 在C++项目中管理自由函数有哪些好的做法?
- 使用自由函数作为LPOVELAPPED_COMPLETION_ROUTINE
- 统一检查成员函数、自由函数和算子是否存在的方式
- 使自由函数的行为类似于成员函数 (C++)
- C++自由函数可以别名吗?
- 调用成员函数(如果存在),回退到自由函数,反之亦然
- ADL找不到模板化的自由函数
- 基于方法或自由函数存在的模板构造函数解析
- G 未定义的引用自由函数
- 为什么未调用自由函数作为构造函数中的参数传递
- 自由函数和继承
- 调用自由函数而不是方法(如果不存在)
- 如何将自由函数与对象一起使用
- 如何使用begin()自由函数