【发布时间】:2015-06-07 10:18:14
【问题描述】:
我正在尝试用 C++ 实现一个列表数据结构。
我想定义一个列表接口,该接口稍后会被 ArrayList 或 LinkedList 等实现继承。
我希望能够像这样使用它
List<int>* testList = new LinkedList<int>;
所以我尝试实现完整的虚拟模板类,但后来意识到我不能混合使用虚拟和模板方法。我尝试了很多不同的方法,并且一直遇到问题。
最好的方法是什么?
编辑(有问题的代码)。我正在尝试使界面看起来像这样:
template<typename T>
class List {
public:
virtual void add(T*) {};
virtual void remove(unsigned int) = 0;
virtual unsigned int size() = 0;
virtual void get(unsigned int) = 0;
virtual ~List();
};
然后我尝试在这里实现它:
template<typename T>
class LinkedList : public List<T> {
/* some stuff */
public:
LinkedList();
virtual unsigned int size();
virtual void add(T*); // the problem i guess
virtual void remove(unsigned int);
virtual void get(unsigned int);
virtual ~LinkedList();
};
【问题讨论】:
-
你不应该为此需要虚函数模板,整个接口/类的模板就足够了。你能显示给你带来麻烦的代码吗?
-
请提供部分有问题的源代码。您不能混合使用虚拟方法和模板方法,但您可以在模板类中使用虚拟方法。这应该可以满足您的需求。
-
请不要。
std::vector,std::list。不要用 C++ 编写 Java。 -
您是否阅读过有关 c++ 类及其语法的教程?
标签: c++ class templates interface polymorphism