2016-11-15 5 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

OS:Windowsの 的環境:Visual Studioの

言語:C++

私はコードでこれを使用することができますどのように

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; 
} 

https://developers.google.com/protocol-buffers/docs/techniques#union はまた、あなたがそれに切り替えることができるように、メッセージが、中に満たされているかを識別する列挙型フィールドを持つようにしたいこと?私はこれが私が望むものだと思う。誰かに私が例を見つけることができるアイディアを持っていますか?

+0

*「使用方法を理解できる人は誰でも小さなスニペットを作れますか?」*これは起こりそうにない:SOはコード作成サービスではない。最初に自分でやってみることをお勧めします – user694733

+0

@Georgeあなたの権利。それは私のせいだった – SDE

+0

まず、私を助けるために時間がかかる皆さんに感謝します。 @ user694733:問題は、私はこれのようなものを使用する方法を理解していないということです。私はたくさんのメッセージを持っていますし、毎回ホールメッセージにクライアントサイドで設定されたメッセージだけを送信したいと思いません。 protoファイルにはvname、vnat、...をオプションとして含むメッセージがあります。しかし、私の目標は、クライアント側で設定されているメッセージだけに穴のメッセージを送信しないことです。私は私の問題を説明できることを願っています:D。 – SDE

答えて

0

オプションフィールドと回避策 - 列挙型を使用するのではなく、探しているものがthisであるようです。

関連する問題