2016-11-15 51 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,而不是使用可選字段和解決方法 - 枚舉。