Передайте справочную упаковку, доступную от <functional>
:
container.remove_if(std::ref(pred));
Если у вас есть только C ++ 98/03, но ваш компилятор имеет TR1, вы можете использовать <tr1/functional>
и std::tr1::ref
, если вносите небольшую поправку в свой предикат:
#include <tr1/functional>
class TestPredicate : public std::unary_function<int, bool>
{ //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// ...
}
container.remove_if(std::tr1::ref(pred));
Если ничего не помогает, то вы можете относительно легко взломать ручное решение:
struct predref
{
TestPredicate & p;
bool operator()(int n) { return p(n); }
predref(TestPredicate & r) : p(r) { }
};
container.remove_if(predref(pred));