私はプロトコルバッファとC++の両方に慣れていないので、これは基本的な質問かもしれませんが、答えを見つけることができませんでした。.proto
基本的に、ファイルで定義された辞書の機能が必要ですenum
。プロトコルバッファを使用してデータを送信していますが、ユニットとそれぞれの名前を定義したいと思います。単位を定義するenum
ことはできますが、人間が読める文字列をそれにマッピングする方法がわかりません。
私が言っていることの例として、.proto
ファイルは次のようになります。
message DataPack {
// obviously not valid, but something like this
dict UnitType {
KmPerHour = "km/h";
MiPerHour = "mph";
}
required int id = 1;
repeated DataPoint pt = 2;
message DataPoint {
required int id = 1;
required int value = 2;
optional UnitType theunit = 3;
}
}
次に、メッセージを作成/処理するようなものがあります。
// construct
DataPack pack;
pack->set_id(123);
DataPack::DataPoint pt = pack.add_point();
pt->set_id(456);
pt->set_value(789);
pt->set_unit(DataPack::UnitType::KmPerHour);
// read values
DataPack::UnitType theunit = pt.unit();
cout << theunit.name << endl; // print "km/h"
ユニット名でを定義し、enum
それらを受信側の文字列にマップする関数を書くこともできますが、同じ場所で定義する方が理にかなっており、その解決策は複雑すぎるようです(少なくとも誰かにとっては)最近Pythonの便利さに甘やかされている人)。これを達成するためのより簡単な方法はありますか?