Буферы протокола Google и векторы stl, карты и улучшенные общие указатели - PullRequest
5 голосов
/ 03 февраля 2011

Поддерживают ли буферы протокола Google векторы stl, карты и улучшают общие указатели?У меня есть некоторые объекты, которые интенсивно используют stl containers, например maps, vectors, а также boost::shared_ptr.Я хочу использовать буферы протокола Google для сериализации этих объектов по сети на разные машины.

Я хочу знать, поддерживает ли google protobuf эти контейнеры?Также, если я буду использовать apache thrift, будет ли это лучше?Мне нужно только сериализовать / десериализовать данные и не нужен сетевой транспорт, который предлагает Apache Thrift.Также apache бережливость, не имея надлежащей документации, отталкивает меня.

1 Ответ

8 голосов
/ 03 февраля 2011

Буферы протокола напрямую обрабатывает намеренно небольшое количество конструкций;векторы хорошо отображаются на «повторяющийся» тип элемента, но как это представляется в C ++ - с помощью методов «add» - вы не (AFAIK) просто вручаете ему вектор.См. «Повторяющиеся поля вложенных сообщений» здесь для получения дополнительной информации.

Re map;для этого нет встроенного механизма , но пара ключ / значение легко представляется в .proto (обычно key = 1, value = 2), а затем обрабатывается с помощью «repeat».

Кажется, что shared_ptr не имеет большого значения в сериализованном файле.Но объект может обрабатываться (предположительно) как сообщение.

Обратите внимание, что в версии Google C ++ создается слой DTO, поэтому вам может потребоваться отобразить между ними и любым существующим объектоммодель.Обычно это довольно тривиально.

Для некоторых языков / платформ существуют варианты protobuf, которые работают с существующими объектными моделями.

(извините, я не могу комментировать вопросы по теме - я не знакомс этим)

...