0

全部,

它是这个线程的延续。

我尝试的是编写以下代码:

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 个。

我如何正确地调用这个函子?

谢谢你。

4

2 回答 2

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) );
于 2013-07-14T05:57:04.800 回答
0

只需将您的 binary_function 更改为 unary_function。
您还需要将结束迭代器添加到擦除调用,以擦除所有已删除的值。

于 2013-07-14T05:56:01.527 回答