Скажем, мы хотим создать наше сообщение, не используя какие-либо существующие ранее .proto-файлы и скомпилированные из них файлы cpp/cxx/h. Мы хотим использовать protobuf строго как библиотеку. Например, мы получили (в некотором только известном нам формате) описание сообщения: сообщение MyMessage
должно иметь MyIntFiels
и дополнительно MyStringFiels
. Как создать такое сообщение? например, заполнить его простым сохранением данных до .bin
и прочитать из этого двоичного его содержимого обратно?Как создать динамическое сообщение с помощью буферов протокола?
Я просмотрел все dynamic_message.h help description и DescriptorPool и т. Д., Но не вижу, как добавлять/удалять поля в сообщении, а также не добавлять к описанию сообщения fly в DescriptorPool.
Может ли кто-нибудь объяснить это?
Неправда. [dynamic_message.h] (https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.dynamic_message) 'Определяет реализацию сообщения, которое может эмулировать типы, которые неизвестны во время компиляции . – myWallJSON
Проблема в том, что если я правильно понимаю документацию, она используется для динамического разбора сообщений, а не для создания динамических сообщений. См. [Здесь] (https://developers.google.com/protocol-buffers/docs/techniques#self-description): «Используя такие классы, как DynamicMessage (доступно на C++ и Java), вы можете писать инструменты, которые могут манипулировать SelfDescribingMessage». Я не совсем прав по поводу возможности самоописания, признаюсь, но совет держится. – DarkWanderer
Мы можем генерировать на лету файл как 'сообщение MyMessage {int32 MyIntFiels = 1; string MyStringFiels = 2;} 'как передать такую строку? – myWallJSON