gpt4 book ai didi

c++ - 类解决方法的虚拟模板成员

转载 作者:行者123 更新时间:2023-11-30 02:07:33 24 4
gpt4 key购买 nike

假设我想为容器实现一些类。它们都应该实现插入、删除等功能。所以我写了一些接口(interface):

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;

当我定义一些容器时我不知道 Predicate 并且我看不到将删除器对象绑定(bind)到容器类有任何意义,例如有一次我可以通过 Predicate 来删除小于 50 的整数而其他时候我想删除甚至整数。在这种情况下可以做什么 - 在基类中声明一些模板化的东西并模拟函数的虚拟行为?

最佳答案

您可以对函数对象使用类型删除。但幸运的是,适当的设施已经存在!例如,在您的情况下,您可以使用 boost::function<bool(const T&)>std::function<bool(const T&)> (支持 TR1/C++11)作为谓词类型!

virtual void remove(std::function<bool(const T&)> p);

关于c++ - 类解决方法的虚拟模板成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7724370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com