我想将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/