Я должен реализовывать контейнеры (список и вектор) с использованием шаблонов, но у меня есть проблема. У меня есть следующий шаблон контейнера:Контейнерный интерфейс возвращает абстрактный тип итератор
template <typename T>
class Container
{
public:
class iterator
{
// ... pure virtual functions
};
// ... pure virtual functions
};
template <typename T>
class List : public Container<T>
{
public:
class iterator : public Container<T>::iterator
{
// ... implemented functions
}
// ... implemented functions
};
Но я не знаю, как определить begin
и end
в Container
, потому что я не могу сделать
virtual iterator begin() = 0;
поскольку итератор является абстрактным классом.
Как я могу, в Container
, указать тип возвращаемого значения функции, так что обратитесь к List<T>::iterator
в List
и Vector<T>::iterator
в Vector
? Или, может быть, вложенный итератор для контейнера - плохая идея?
Я видел, что могу использовать интеллектуальные указатели, но мой компилятор поддерживает только C++ 98.
EDIT: Поэтому я пошел без наследства, vector
и list
был абсолютно независимым. Но если вы видите какой-либо способ достичь того, что я просил выше, не стесняйтесь отвечать.
Я не вижу причины 'iterator' должен быть в классе' Container' * вообще *, а 'begin()' и 'end()' должен возвращать 'typename T :: iterator', если я понимаю, что вы «пытаюсь добиться». – WhozCraig
Я не понимаю, почему итератор должен быть в T, T не должен знать, что он находится в контейнере. –
Можете ли вы рассказать нам больше о том, почему вам нужен родительский класс «Контейнер»? Конечно, стандартная библиотека не работает. –