Я пытаюсь реализовать структуру данных списка в C++.Интерфейс C++ Template (реализация списка)
Я хочу определить интерфейс списка, который позже будет унаследован реализацией, такой как 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();
};
Для этого вам не нужны шаблоны виртуальных функций, достаточно всего шаблона для всего интерфейса/класса. Можете ли вы показать код, который дает вам проблемы? – Angew
Просьба предоставить часть проблемного исходного кода. Вы не можете смешивать виртуальные и шаблонные методы, но вы можете иметь виртуальные методы в шаблонных классах. Это должно быть сделано для ваших нужд. – Spook
Пожалуйста, не надо. 'std :: vector',' std :: list'. Не делайте Java на C++. – Griwes