假设我想为容器实现一些类。他们都应该实现这样的功能,如插入,删除等,所以我写了一些接口:类变通方法的虚拟模板成员
template <class T>
class ContainerInterface {
public:
virtual void insert(T element) = 0;
template<class Predicate>
virtual void remove(Predicate p) = 0;
};
现在我可以写类似:
template <class T>
class MyVector : public ContainerInterface<T>{};
template <class T>
class MyList : public ContainerInterface<T>{};
而且我相信,MyVector和MYLIST必须实现功能插入和删除。然而,有错误:
error: templates may not be ‘virtual’
它来源于:
template<class Predicate>
virtual void remove(Predicate p) = 0;
我不知道谓语时,我定义了一些容器和我dont'see任何意义绑定删除器对象容器类,例如有一次我可以传递Predicate来删除小于50的整数,其他时候我想要删除甚至整数。在这种情况下可以做些什么 - 在基类中声明一些模板化的东西并模拟函数的虚拟行为?