如何将虚拟成员传递给list :: remove_if

时间:2018-05-15 19:56:51

标签: c++ list stl polymorphism

#include<functional>
#include<list>

class A {
  public: virtual bool isOdd(int x) = 0;
};

class B : public A {
  public: bool isOdd(int x) override 
    { return (x%2)!=0; }
};

int main () {
  A *a = new B();
  std::list<int> l {1,2,3,4};
  l.remove_if(a->isOdd);
  return 0;
}

此代码为l.remove_if(a->isOdd);生成以下编译器错误:

reference to non-static member function must be called

如何调用remove_if以便调用isOdd类的B实现?

我没有找到直接引用B::isOdd的解决方案。相反,我希望有一个指向抽象类A和多个(非抽象)A子类的指针,并使用指针指向的任何派生类的实现。

0 个答案:

没有答案