2016-11-15 105 views
1

我是使用Protobuf的新手。我在C++中有一个服务器客户端通信(UDP)。现在我使用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; 
} 

现在我想只发送其设置的信息。例如类型是1.那么我如何访问或设置名称?

任何人都可以做一个小片段,我可以理解如何使用它?

我为我的英语技能道歉:d

的Protobuf版本:2.5.0

操作系统:Windows 环境:Visual Studio中

语言:C++

From 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

@乔治你的权利。这是我的错 – SDE

+0

首先感谢所有花时间帮助我的人。 @ user694733:问题是我不明白如何使用这样的东西。我有很多消息,我不想每次发送空洞消息只发送客户端设置的消息。在proto文件中,我有一个消息,其中包含vname,vnat,...作为可选项。但是我的目标不是只发送在客户端设置的消息。我希望我能解释我的问题:D。 – SDE

回答

0

这听起来像你要找的是this,而不是使用可选字段和解决方法 - 枚举。