Я новичок как в буферах протоколов, так и в С++, так что это может быть основной вопрос, но мне не повезло найти ответы. По сути, я хочу, чтобы функциональность словаря была определена в моем файле .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 ). Есть ли более простой способ сделать это?