Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация BidirectionalIterator, чёта ни въяжаю %) 
V
    Опции темы
boostcoder
Дата 29.8.2011, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



всем доброго дня.

для некоторой статьи(man`а) пытаюсь разобраться с требованиями для ConstBufferSequence и для собственного итератора соответствующего требованиям BidirectionalIterator.

нарукоблудил такой код:
Код

#include <boost/asio.hpp>
#include <algorithm>

struct my_iterator {
   typedef boost::asio::const_buffer value_type;
   my_iterator() {}
   my_iterator(const my_iterator&) {}
   
   my_iterator& operator= (const my_iterator&) { return *this; }
   
   bool operator== (const my_iterator&) const { return true; }
   bool operator!= (const my_iterator& r) const { return !operator==(r); }
   
   value_type operator* () const { return value_type(); }
   
   my_iterator operator++ (int) {}
   my_iterator operator++ () {}
};

struct my_const_buffer_sequence {
   typedef boost::asio::const_buffer value_type;
   typedef my_iterator const_iterator;
   
   const_iterator begin() {}
   const_iterator end() {}
};

void handler(
   const boost::system::error_code& error, // Result of operation.
  std::size_t bytes_transferred            // Number of bytes written from the
                                           // buffers. If an error occurred,
                                           // this will be less than the sum
                                           // of the buffer sizes.
) {
}

int main() {
   boost::asio::io_service ios;
   boost::asio::ip::tcp::socket socket(ios);
   boost::asio::async_write(socket, my_const_buffer_sequence(), &handler);
}


http://liveworkspace.org/code/caf388f3bfbc...e68474e64d4b1fc

сейчас получаю ошибку:
Цитата

boost/asio/detail/consuming_buffers.hpp:176:5: error: no matching function for call to 'distance(my_const_buffer_sequence::const_iterator&, my_const_buffer_sequence::const_iterator&)'
boost/asio/detail/consuming_buffers.hpp:176:5: note: candidate is:
include/c++/4.6.0/bits/stl_iterator_base_funcs.h:113:59: note: template<class _InputIterator> typename std::iterator_traits::difference_type std::distance(_InputIterator, _InputIterator)


дальше мыслей нет.
подскажите, что оно от меня кочет?

зы
коверкать русяз весьма прикольно бывает smile 

Это сообщение отредактировал(а) boostcoder - 29.8.2011, 19:05
PM WWW   Вверх
mes
Дата 29.8.2011, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  29.8.2011,  17:08 Найти цитируемый пост)

дальше мыслей нет.
подскажите, что оно от меня кочет?

показывает, что не распознает класс как итератор.. наследование поможет.. 

Цитата(boostcoder @  29.8.2011,  17:08 Найти цитируемый пост)
с требованиями для ConstBufferSequence 

ну раз буффер константный begin() и end() нужно соотвественно пометить.. 




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 30.8.2011, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



я, конечно, любитель лаконичности. но Ваш ответ -
Цитата(mes @  29.8.2011,  20:09 Найти цитируемый пост)
наследование поможет

даже меня повергает в тупик smile
PM WWW   Вверх
mes
Дата 30.8.2011, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  30.8.2011,  01:41 Найти цитируемый пост)
Цитата

наследование поможет


даже меня повергает в тупик

http://cplusplus.com/reference/std/iterator/iterator/
smile

P.S. а насчет лаконичности, нужно рассматривать цитату целиком :
Цитата(mes @  29.8.2011,  19:09 Найти цитируемый пост)
показывает, что не распознает класс как итератор.. наследование поможет.. 

т.е. наследование поможет распознать класс как итератор, и, я так понимаю, единственно напрашивающий вывод : отнаследовать от итераторной базы..
smile


Это сообщение отредактировал(а) mes - 30.8.2011, 08:22


--------------------
PM MAIL WWW   Вверх
Earnest
Дата 30.8.2011, 09:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



boostcoder, от тру-итератора требуется куча всяких определений типов и прочая. Либо наследуйся от подходящий базы, как посоветовал mes, либо посмотри на бустовские iterator-facade и iterator_adaptor - очень полезные классы; я все доморощенные итераторы через них делаю.


--------------------
...
PM   Вверх
boostcoder
Дата 30.8.2011, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Earnest @  30.8.2011,  09:44 Найти цитируемый пост)
либо посмотри на бустовские iterator-facade и iterator_adaptor

хм.. никогда не использовал...
я вообще, по моему впервые, задумался над реализацией и требованиями к итераторам.
PM WWW   Вверх
Earnest
Дата 30.8.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Дык пора уже - иначе какой ты бусткодер smile 
Действительно, классы полезные, и там же еще несколько полезных готовых итераторов-оберток типа counting_iterator. 
С помощью iterator_adapter можно, например, ограничить доступ к деталям контейнера в каком-то сложном объекте. Например, в контейнере хранятся какие-то объекты с кучей подробностей, но клиенту ты хочешь предоставить только часть этой информации, и вообще сделать так, чтобы он не знал о деталях устройства контейнера. Вот тут-то iterator_adaptor как нельзя более кстати.


--------------------
...
PM   Вверх
boostcoder
Дата 30.8.2011, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Earnest @  30.8.2011,  15:21 Найти цитируемый пост)
пора уже - иначе какой ты бусткодер

 smile 
раньше что-то задачи не было..

сижу - читаю...
PM WWW   Вверх
boostcoder
Дата 30.8.2011, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



наследованием, получился такой код:
Код

#include <boost/asio.hpp>

#include <iterator>
#include <algorithm>

struct my_iterator: std::iterator<std::bidirectional_iterator_tag, boost::asio::const_buffer> {
   bool operator== (const my_iterator&) const { return true; }
   bool operator != (const my_iterator& r) const { return operator==(r); }

   my_iterator operator++() { return *this; }
   my_iterator operator++(int) { return *this; }

   my_iterator operator--() { return *this; }
   my_iterator operator--(int) { return *this; }

   value_type operator* () const { return value_type(); }
};

struct my_const_buffer_sequence {
   typedef boost::asio::const_buffer value_type;
   typedef my_iterator const_iterator;
   
   const_iterator begin() const {}
   const_iterator end() const {}
};

void handler(
   const boost::system::error_code& error, // Result of operation.
   std::size_t bytes_transferred           // Number of bytes written from the
                                           // buffers. If an error occurred,
                                           // this will be less than the sum
                                           // of the buffer sizes.
) {
}

int main() {
   boost::asio::io_service ios;
   boost::asio::ip::tcp::socket socket(ios);
   boost::asio::async_write(socket, my_const_buffer_sequence(), &handler);
}


http://liveworkspace.org/code/6cd54ffb9aab...703376c760abd87

сейчас попробую с помощью boost.iterator.
PM WWW   Вверх
boostcoder
Дата 30.8.2011, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  30.8.2011,  17:03 Найти цитируемый пост)
T  - Type of elements pointed by the iterator.

ну правильно. при разыменовании итератора я получаю boost::asio::const_buffer.
или что?

Добавлено через 30 секунд
эм.. пропал Ваш пост smile
PM WWW   Вверх
mabrarov
Дата 30.8.2011, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 12.1.2011
Где: Казань

Репутация: 8
Всего: 9



Цитата(boostcoder @ 29.8.2011,  18:08)
для некоторой статьи(man`а) пытаюсь разобраться с требованиями для ConstBufferSequence и для собственного итератора соответствующего требованиям BidirectionalIterator.

Доброй ночи. 
Не в тему итераторов, но в тему Asio BufferSequence - ma::cyclic_buffer.
PM MAIL WWW Skype   Вверх
boostcoder
Дата 30.8.2011, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



mabrarov, здравствуйте.
ma::cyclic_buffer я смотрел. даже понял что и как smile

но сия тема возникла в следствии непонимания(не умения?) реализовывать тип в соответствии с требованиями BidirerctionalIterator.
но вроде разобрался. закрою тему позже.

зы
по поводу критики/комментариев к статье - все приветствуется smile

Это сообщение отредактировал(а) boostcoder - 30.8.2011, 23:35
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.