Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: итерация унаследованных объектов  (Прочитано 9482 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 01-09-2009 14:56 » new

итерация унаследованных объектов

тренируюсь объединять наследование и шаблоны на примере итератора:

есть итератор в котором содержится ссылка на объект, далее попытался разделить логику связывания объектов и данные объектов в 2х независимых классах

застрял на проблемме перехода к следуеющему объекту через iterator++

если использую в итераторе указатель на объект с данными, то он не может перейти к следующему объекту

если использую в итераторе указатель на объект связывания, то итератор не может выводить данные

как этот круг можно решить?
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 01-09-2009 15:00 » 

пример проблемы в студию
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 01-09-2009 15:04 » 

Код:
struct slink {
slink* next;
slink(slink* p=0):next(p) {}
};

struct lint: public slink {
int i;
//bool operator==(const lint& l) { return i==l.i;}
//bool operator!=(const lint& l) { return i!=l.i;}
};

template<class T> class intrusive_list {
T *head;
T *last;
size_t s;
public:
class iterator {
T* p;
public:
iterator(T* pp):p(pp) {}
iterator& operator++(int ) {
p=p->next;
return *this;
}
T& operator*() { return *p; }

проблемма в p=p.next или Т* p
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 01-09-2009 15:18 » 

твой код неполный (вернее, пару фигурных скобок не хватает) - расставил по наитию, это компилируется. А вопрос я так и не понял ))
Код:
template<class T> class intrusive_list
{
T *head;
T *last;
size_t s;

public:

class iterator
{
T* p;

public:
iterator(T* pp):p(pp)
{
}

iterator& operator++(int )
{
p=p->next;
return *this;
}

T& operator*()
{
return *p;
}
};

};
вопрос уточни ?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 01-09-2009 15:24 » 

а самое главное - покажи, когда это что то не работает - не в описании шаблона, а в примере использования
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #5 : 06-09-2009 05:45 » 

вопрос уточни ?

конструкция вида:
/* derived type */ p = /* base type */ p->next; // не будет компилироваться при первой же интстанциации шаблона

   intrusive_list<lint> l;
   intrusive_list<lint>::iterator b=l.begin();
   b++;

едниственное, что пришло в голову:
p=static_cast<derived*>(p->next);
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 06-09-2009 07:13 » 

ну только так и можно вроде

p=(derived*)(p->next);
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #7 : 06-09-2009 14:57 » 

(derived*) сишный анахронизм или как там его, в с++ вроде его употреблять лишний раз не рекомендуется, тк он приравнен к reinterpret_cast

Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 07-09-2009 02:57 » 

чушь, применяю и буду применяь ) А эти корявки не запоминаются и некрасивые
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #9 : 07-09-2009 03:57 » 

поддерживаю, в коем-то веке
но про другим причинам Улыбаюсь сишный синтаксис тяжело искать в коде.
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines