Здравствуйте, niXman, Вы писали:
X>как вариант — написать обертку над yas::*_oarchive:
X>X>struct my_oarchive {
X> template<typename T>
X> my_oarchive& operator& (const T &o) {
X> yas::*_oarchive::operator& (o);
X> yield();
X> return *this;
X> }
X>};
X>
Ну да — я это и имел в виду в первом сообщении. (ранее я
показывал примерАвтор: Evgeny.Panasyuk
Дата: 26.06.13
чего-то подобного, там даже ручной демультиплексор для наглядности).
EP>>Меня же интересует — существуют ли какие-нибудь другие удобные способы?
X>мне такие не известны. если найдешь — расскажи плиз.
Ок, хорошо.
EP>>Нет, изменение дерева не происходит.
X>так если у тебя неизменяемый объект — то что мешает таки реализовать свой ostream класс, и в нем, когда его внутренний буфер достигает предельного размера — отсылать собранные данные, и снова заполнять буфер следующими данными?
X>чтоб не было бауз в использовании сети — завести два буфера: первый отдаешь на отправку, второй — для сериализации в него. в хендлере отправки данных переключаешь буфера — второй на отправку, а первый для сериализации.
А как отдать управление io_service'у после первой отсылки? Ок, допустим мы как-то решили эту задачу. Но сериализация в большинстве случаев будет на порядки быстрее отправки/получения чанков.
Отправив первый чанк — мы заполним второй быстрее чем сообщение будет отправлено, и теперь у нас уже два неотправленных буфера. То есть мы вернулись к тому, с чего начали.