Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Basie
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 8
#1

Реализация энумератора - C++

28.12.2012, 00:00. Просмотров 402. Ответов 2
Метки нет (Все метки)

Пишу C++ аналог Enumerator'ов из .NET на основе стандартных итераторов. Сейчас интерфейс класса выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template < typename STLiterator >
class Enumerator {
public:
    Enumerator ( ) : _current(_end), _next(_end) { }
    Enumerator ( STLiterator begin, STLiterator end )
        : _current(begin), _next(begin), _end(end) { }
 
    bool operator ++ ( ) ; // Переход к следующему элементу
    ? operator * ( ); // Получение значения текущего элемента ("разыменование")
    ? operator -> ( ? ); // Доступ к членам элемента
 
private:
    STLiterator _current, _next, _end;
};
Класс должен работать с любыми классами, у которых есть обычный итератор (с операторами ++, *, ->) включая указатели.
Конструктор получает стандартные итераторы begin()/end() (или constBegin()/constEnd()), либо, в случае указателей, - начальное и конечное смещения.
Оператор ++ при вызове пытается сместиться к следующему элементу последовательности и, если это удалось, возвращает true, иначе (если дошли до конца) - false. Для доступа к самому первому элементу ++ тоже необходимо предварительно вызвать.
Операторы * и -> должны предоставлять доступ к значению текущего элемента и к его членам соответственно.
Вопрос: какими должны быть типы и параметры, вместо которых в интерфейсе стоят знаки вопроса? Как грамотно расставить const и & у этих типов?
P. S. Те, кому режет глаза перегрузка операторов ++ и *, могут в своём ответе использовать вместо них методы next и value с теми же параметрами/типом возвращаемого значения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2012, 00:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализация энумератора (C++):

Реализация - C++
Кто может помочь с одним моментом в курсовике , курсовик сделан почти весь, но там буквально 5-7 строчек кода нужно чтобы всё заработало. ...

Реализация стека - C++
Подскажите, как создать класс, который реализует стек? А также методы включения и выключения элементов?

Реализация функций - C++
Помогите, пожалуйста, реализовать методы классов (заголовки даны в biTree.g) Я плохо шарю, а завтра сдавать! Очень надо( Дан: biTree.h...

Реализация идеи - C++
Доброго времени суток. Вопрос может быть будет странным.По сути у меня вот появилась идейка как жизнь улучшить немножко себе(ведь программы...

реализация класса - C++
Дано: класс &quot;Фильмы&quot; (название, жанр, главные роли). Вопрос: Возможно ли такой подход к реализации? class films { string...

Dynamic_cast реализация - C++
Добрый вечер, есть застоявшаясь фраза: &quot;dynamic_cast&lt;Type*&gt;( pointer ) очень медленное, его лучше не использовать&quot; . Примерная...

2
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
28.12.2012, 00:26 #2
Для -> надо возвращать STLiterator value type*.
Для * надо возвращать STLiterator value type&
По поводу константности - входящие итераторы могут быть как константными, так и не константными. Возможно, нужно несколько реализаций
0
Basie
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 8
28.12.2012, 01:57  [ТС] #3
A STLiterator value type нужно включить ещё одним параметром в шаблон?

И ещё: может быть можно как-то вывернуться и возвратить то, что возвращают соответствующие операторы STLiterator? Например вместо * и -> сделать оператор преобразования:
C++
1
2
3
operator const STLiterator & ( ) const {
    return _current;
}
и чтобы операции * и -> , применённые к энумератору, делегировались через это неявное преобразование к _current'у, но при этом защитить последний const'ами от несанкционированного изменения? (Но чтобы само значение, на которое указывает _current, можно было бы менять, если, конечно, он не const_iterator - поправьте, если const'ы стоят не так).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2012, 01:57
Привет! Вот еще темы с ответами:

Реализация 2-3 дерева - C++
Помогите пожалуйста реализовать 2-3 дерево

Реализация класса - C++
Так как только начал изучать с++, возникает вопрос: есть задание : Реализовать класс IntArray. Разработать тестовую программу для...

Реализация функции c++ - C++
Программа: #include &lt;iostream&gt; using namespace std; struct Node { int data; Node* next; };

Реализация стека - C++
Здравствуйте, помогите пожалуйста с реализацией стека без использования STL. Стек отображен в памяти Вектором, память статическая(1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru