Сериализация Boost :: вариант с использованием protobuf - PullRequest
0 голосов
/ 23 ноября 2018

Я должен сериализовать std::queue, который содержит boost::variant.Вариант имеет около 20 различных структур.Что является лучшим / предпочтительным способом представления варианта в proto3?Я имею в виду, я должен использовать oneof или any?Как насчет их производительности?

Я не спрашиваю, как это сделать, я не знаю, какое решение лучше.

1 Ответ

0 голосов
/ 24 ноября 2018

Вы начинаете наоборот.Вы пишете файл .proto, который определяет (на языке схемы Google protobuf) «сообщения», которые вы хотите определить.Одним из них может быть «oneof», содержащий множество других.Затем вы компилируете этот файл .proto с использованием компилятора Protocol Buffers и в итоге получите исходный код C ++, который реализует эти сообщения как классы C ++, полученные из библиотеки базовых классов.Эти классы имеют встроенные подпрограммы сериализации. Ни в коем случае вы не используете Boost или написанные от руки классы C ++.

Boost :: Вариант вполне может быть эквивалентом 'oneof' протобуфа, но вы не будете использовать его для хранения различных сообщений protobuf, потому что это то, что 'oneof' делает для вас.Смешение Boost :: варианта с собственным стилем работы GPB, вероятно, требует запутанного кода.

...