gpt4 book ai didi

dictionary - 在 Protocol Buffer 中定义字典

转载 作者:行者123 更新时间:2023-12-04 18:47:45 35 4
gpt4 key购买 nike

我对 Protocol Buffer 和C++还是陌生的,所以这可能是一个基本问题,但是我没有运气找到答案。基本上,我希望.proto文件中定义的字典的功能像enum一样。我正在使用 Protocol Buffer 发送数据,并且想定义单位及其各自的名称。 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的便利宠坏的人)。有没有更简单的方法可以做到这一点?

最佳答案

您可以使用自定义选项将字符串与每个枚举成员相关联:
https://developers.google.com/protocol-buffers/docs/proto#options

在.proto中看起来像这样:

extend google.protobuf.FieldOptions {
optional string name = 12345;
}

enum UnitType {
KmPerHour = 1 [(name) = "km/h"];
MiPerHour = 2 [(name) = "mph"];
}

但是请注意,某些第三方protobuf库不理解这些选项。

关于dictionary - 在 Protocol Buffer 中定义字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474416/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com