我是新来的两个协议缓冲区和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的便利)。 有没有做到这一点更简单的方法?