Определить словарь в буфере протокола

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

5
задан user812786 13 July 2012 в 17:32
поделиться