我想将std::remove_if与作为谓词的成员函数的谓词一起使用。

那是

class B;

class A {
    bool invalidB( const B& b ) const; // use members of class A to verify that B is invalid
    void someMethod() ;
};

现在,实现A::someMethod,我有
void A::someMethod() {
    std::vector< B > vectorB;
    // filling it with elements

    // I want to remove_if from vectorB based on predicate A::invalidB
    std::remove_if( vectorB.begin(), vectorB.end(), invalidB )
}

有没有办法做到这一点?

我已经研究了解决方案
Idiomatic C++ for remove_if,但处理的情况略有不同,即remove_if的一元谓词是B的成员,而不是A

此外,
我无权使用BOOST或c++ 11

谢谢!

最佳答案

一旦进入remove_if,您就失去了this。因此,您必须声明一个包含
它,类似于:

class IsInvalidB
{
    A const* myOwner;
public:
    IsInvalidB( A const& owner ) : myOwner( owner ) {}
    bool operator()( B const& obj )
    {
        return myOwner->invalidB( obj );
    }
}

只需将此实例传递给A即可。

关于c++ - std::remove_if使用其他类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16518566/

10-11 01:06