Информация об изменениях

Сообщение Re: "Расширить" operator *() от 23.12.2022 7:01

Изменено 23.12.2022 7:04 Stanislav V. Zudin

Re: "Расширить" operator *()
Здравствуйте, Su34, Вы писали:

S>Доброго дня.

S>Пишу свой iterator (усеченная версия):
S>
class iterator 
S>{
S>    NODE*    _pos;
S>    int     _val;
S>    iterator(NODE* pos) : _pos(pos) {}
S>    int operator *() { return _pos->_val; } 
S>};

S>Как мне получить доступ к _pos, если *it показывает только _val. Т.е.где-то в тексте:
S>
S>iterator it = myList.begin();    // iterator my::begin() { return iterator(_my_node); }
S>...
S>_my_node = it->_pos;    // НЕ ПОЛУЧАЕТСЯ !
S>


Гм. Ну либо
_my_node = it._pos;

Либо operator *() должен возвращать сцылку на какую-то структуру, которая содержит всё, к чему надо добраться.
struct IteratorGiblets
{
   NODE*    _pos;
   int     _val;
};
class iterator
{
   IteratorGiblets myGiblets;
   ... всё остальное
}


Перегрузки по возвращаемому значению нет, поэтому два оператора создать не получится.
Re: "Расширить" operator *()
Здравствуйте, Su34, Вы писали:

S>Доброго дня.

S>Пишу свой iterator (усеченная версия):
S>
class iterator 
S>{
S>    NODE*    _pos;
S>    int     _val;
S>    iterator(NODE* pos) : _pos(pos) {}
S>    int operator *() { return _pos->_val; } 
S>};

S>Как мне получить доступ к _pos, если *it показывает только _val. Т.е.где-то в тексте:
S>
S>iterator it = myList.begin();    // iterator my::begin() { return iterator(_my_node); }
S>...
S>_my_node = it->_pos;    // НЕ ПОЛУЧАЕТСЯ !
S>


Гм. Ну либо
_my_node = it._pos;

Либо operator *() должен возвращать сцылку на какую-то структуру, которая содержит всё, к чему надо добраться.
struct IteratorGiblets
{
   NODE*    _pos;
   int     _val;
};
class iterator
{
   IteratorGiblets myGiblets;
   ... всё остальное
}


Перегрузки по возвращаемому значению нет, поэтому два оператора создать не получится.

Upd. Чтобы не было путаницы в операторах, стоит заглянуть сюда: https://en.cppreference.com/w/cpp/language/operator_member_access