Сообщение Re: Статья "Type Driven Wire Protocols with Boost Fusion" от 06.10.2014 10:51
Изменено 06.10.2014 10:54 Evgeny.Panasyuk
Здравствуйте, PM, Вы писали:
PM>Как и следует из названия, автор использует Boost.Fusion для compile-time reflection чтобы парсить данные бинарного протокола в структуры. Поддерживаются примитивные типы, строки, массивы, поля переменной длины, необязательные поля, вложенные структуры, т.е. всё, что используется в типичных бинарных протоколах.
Тут нет ничего не обычного, достаточно знать возможности Boost.Fusion, а всё остальное механически вытекает из этих возможностей.
Вот, например, "вся сериализация" на базе Boost.Fusion:
Я думаю многие здесь на форуме уже использовали Fusion для подобных задач. Например:
PM>Как и следует из названия, автор использует Boost.Fusion для compile-time reflection чтобы парсить данные бинарного протокола в структуры. Поддерживаются примитивные типы, строки, массивы, поля переменной длины, необязательные поля, вложенные структуры, т.е. всё, что используется в типичных бинарных протоколах.
Тут нет ничего не обычного, достаточно знать возможности Boost.Fusion, а всё остальное механически вытекает из этих возможностей.
Вот, например, "вся сериализация" на базе Boost.Fusion:
template<typename Archive, typename T>
typename enable_if
<
fusion::traits::is_sequence<T>
>::type
serialize(Archive &archive, T &xs)
{
fusion::for_each(xs, [&](auto &x)
{
serialize(archive, x);
});
}
Я думаю многие здесь на форуме уже использовали Fusion для подобных задач. Например:
http://rsdn.ru/forum/cpp/5413524.1
Автор: Evgeny.Panasyuk
Дата: 28.12.13
Сейчас всё ядро сериализации — это in/out archive (которые пришлось бы писать в любом случае) + рекурсивная сериализация Boost.Fusion Forward Sequence. На всё про всё — меньше ста строк.
Структуры определяются просто как BOOST_FUSION_DEFINE_STRUCT и уже готовы к сериализации.
Re: Статья "Type Driven Wire Protocols with Boost Fusion"
Здравствуйте, PM, Вы писали:
PM>Как и следует из названия, автор использует Boost.Fusion для compile-time reflection чтобы парсить данные бинарного протокола в структуры. Поддерживаются примитивные типы, строки, массивы, поля переменной длины, необязательные поля, вложенные структуры, т.е. всё, что используется в типичных бинарных протоколах.
Тут нет ничего особенного, достаточно знать возможности Boost.Fusion, а всё остальное механически вытекает из них.
Вот, например, "вся сериализация" на базе Boost.Fusion:
Я думаю многие здесь на форуме уже использовали Fusion для подобных задач. Например:
PM>Как и следует из названия, автор использует Boost.Fusion для compile-time reflection чтобы парсить данные бинарного протокола в структуры. Поддерживаются примитивные типы, строки, массивы, поля переменной длины, необязательные поля, вложенные структуры, т.е. всё, что используется в типичных бинарных протоколах.
Тут нет ничего особенного, достаточно знать возможности Boost.Fusion, а всё остальное механически вытекает из них.
Вот, например, "вся сериализация" на базе Boost.Fusion:
template<typename Archive, typename T>
typename enable_if
<
fusion::traits::is_sequence<T>
>::type
serialize(Archive &archive, T &xs)
{
fusion::for_each(xs, [&](auto &x)
{
serialize(archive, x);
});
}
Я думаю многие здесь на форуме уже использовали Fusion для подобных задач. Например:
http://rsdn.ru/forum/cpp/5413524.1
Автор: Evgeny.Panasyuk
Дата: 28.12.13
Сейчас всё ядро сериализации — это in/out archive (которые пришлось бы писать в любом случае) + рекурсивная сериализация Boost.Fusion Forward Sequence. На всё про всё — меньше ста строк.
Структуры определяются просто как BOOST_FUSION_DEFINE_STRUCT и уже готовы к сериализации.