Я использую Google Protobuf версии библиотеки 2.61 и хочу использовать расширение,Protobuf C++ расширения используют
У меня есть следующие проты файлы:
package communication;
message BaseMessage {
required uint64 server_id = 1;
required string uuid = 2;
required uint64 message_id = 3;
extensions 100 to max;
}
message GetIdentify {
extend BaseMessage {
optional GetIdentify message = 100;
}
required string hostname = 1;
}
Я могу построить сообщение, используя следующее код:
communication::BaseMessage base_message;
base_message.set_message_id(123456);
base_message.set_server_id(112313123);
base_message.set_uuid("asdaskdjasd213123123asd");
base_message.MutableExtension(communication::GetIdentify::message)->set_hostname("http://test123123123ing");
Однако я хотел бы сделать противоположное действие и получить сообщение с неизвестным расширением и разобрать его и найти какое расширение это и анализировать в соответствии с ним.
Я использовал nanopb для моего проекта c и версии python. но мне очень сложно написать protobuf-код в C++, потому что я не могу найти достаточно документации и примеров кода.
Есть ли способ сделать это без добавления дополнительной переменной типа расширения?
Кроме того, что это самый элегантный способ сделать это в C++
Ok спасибо, поэтому, единственный вариант итерации каждый раз, когда все типы расширений существуют, пока я не найду расширение? – RythemOfTheDay
Кроме того, вы можете добавить перечислимое поле 'type' в базовое сообщение, указав тип фактического сообщения. –