ALL,
这是this线程的延续。
我尝试的是编写以下代码:
struct Remover : public std::binary_function<CPlayer,void,bool>
{
public:
bool operator()(const CPlayer &player) const
{
return player.IsNewPlayer();
}
};
并以这种方式称呼它:
players_pool->erase( std::remove_if( players_pool->begin(), players_pool->end(), std::bind2nd( Remover() ) ) );
但它给了我一个错误:
std :: bind2nd():需要2个参数 - 提供1个。
如何正确调用此仿函数?
谢谢。
答案 0 :(得分:3)
您无需在Remover()
中包裹std::bind2nd()
。
此外,您不需要从std::binary_function<>
派生(这是错的,无论如何; Remover
是一元函子)。事实上,你不需要从任何事物中获得。
最后,如果您的编译器支持C ++ 11,您可以将代码缩减到:
players_pool->erase( std::remove_if( begin(*players_pool), end(*players_pool),
[](const CPlayer &player) {
return player.IsNewPlayer();
} ),
end(*players_pool) );
答案 1 :(得分:0)
只需将binary_function更改为unary_function即可 您还需要将结束迭代器添加到擦除调用中,以便擦除所有删除的值。