//不使用函数绑定器的原版
bool func(int number) //一元断言
{
return number > 4;
}
void test()
{
vector<int> numberVec = {1, 3, 7, 8, 1, 2, 5, 7, 9, 4, 6, 7};
auto it = remove_if(numberVec.begin(), numberVec.end(), func);
}
1、bind1st()
template< class F, class T > std::binder1st bind1st( const F& f, const T& x );
f必须是二元函数,形参x作为函数f的第一个参数
//使用函数绑定器实现原版代码的效果
void test()
{
vector<int> numberVec = {1, 3, 7, 8, 1, 2, 5, 7, 9, 4, 6, 7};
//remove_if前两个参数所表示范围内容器的元素作为函数less<int>()的第二个参数
auto it = remove_if(numberVec.begin(), numberVec.end(),
bind1st(std::less<int>(), 4));
}
std::less()实现的功能:
constexpr bool operator()(const T &lhs, const T &rhs) const
{
return lhs < rhs;
}当把4作为lhs,把numberVec的元素作为rhs就能实现func()
2、bind2nd()
template< class F, class T > std::binder2nd bind2nd( const F& f, const T& x );
形参x作为二元函数f的第二个参数
void test()
{
vector<int> numberVec = {1, 3, 7, 8, 1, 2, 5, 7, 9, 4, 6, 7};
//容器的元素作为函数greater<int>()的第一个参数
auto it = remove_if(numberVec.begin(), numberVec.end(),
bind2nd(std::greater<int>(), 4));
}
3、bind()