#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
子类的指针,并使用指针指向的任何派生类的实现。