2016-11-15 6 views
1

Я новичок в использовании Protobuf. У меня есть связь с сервером (UDP) на C++. Теперь я использую Protobuf для отправки сообщения, которое содержит некоторую информацию на сервере.Как использовать типы соединений Protobuf C++

package Test; 
message vName{ 
required int32 name = 1; 
} 

message vNat{ 
required int32 nat = 1; 
} 

message vTan{ 
required int32 tan = 1; 
} 
message Test{ 
enum Type { vName = 1; vNAT = 2; vTAN = 3;} 

required Type type = 1; 

optional vName name = 2; 
optional vNat nat = 2; 
optional vTan tan = 2; 
} 

Теперь я хочу только передать информацию, которая установлена. Например, Type is 1. Тогда как я могу получить доступ или установить имя?

Может кто-нибудь сделать небольшой фрагмент, который я могу понять, как его использовать?

Прошу прощения за мой английский навыки: D

Protobuf версия: 2.5.0

ОС: Windows Enviroment: Visual Studio

Язык:

C++

От https://developers.google.com/protocol-buffers/docs/techniques#union Вы также можете иметь поле перечислимого, идентифицирующее сообщение заполнено, так что вы можете переключиться на него:

message OneMessage { 
enum Type { FOO = 1; BAR = 2; BAZ = 3; } 

// Identifies which field is filled in. 
required Type type = 1; 

// One of the following will be filled in. 
optional Foo foo = 2; 
optional Bar bar = 3; 
optional Baz baz = 4; 
} 

Как я могу использовать это в коде? Я думаю, что это то, чего я хочу. Есть ли у кого-нибудь идея, где я могу найти пример?

+0

* «Кто-нибудь может сделать небольшой фрагмент, который я могу понять, как его использовать?» * Вряд ли это произойдет: SO не является написанием кода. Я предлагаю вам сначала попытаться сделать это самостоятельно, а затем спросить, защищаете ли вы конкретную проблему. – user694733

+0

@George ваше право. это была моя ошибка – SDE

+0

Прежде всего, спасибо всем, кто не торопится, чтобы помочь мне. @ user694733: проблема в том, что я не понял, как использовать что-то вроде этого. У меня много сообщений, и я не хочу отправлять каждый раз сообщение о дыре только сообщение, установленное на стороне клиента. В файле proto у меня есть сообщение, которое содержит vname, vnat, ... как необязательный. Но моя цель не посылать сообщение отверстия только сообщение, которое будет установлено на стороне клиента. Надеюсь, я смогу объяснить свою проблему: D. – SDE

ответ

0

Похоже, что вы ищете this, вместо использования дополнительных полей и обходного перечисления.