Google 使用 C++ 的 protobuf 重复字段
Google protobuf repeated fields with C++
我需要使用 C++ 中的序列化键值对构建以下 Metadata
消息。
message MetadataValue {
string key = 1;
google.protobuf.Value value = 2;
}
message Metadata {
repeated MetadataValue metadata = 1;
}
所以我可以从 C++ 中的以下 for 语句中获得 MetadataValue
的值。
Metadata metadata;
if (buffer.has_value()) {
auto pairs = buffer.value()->pairs();
for (auto &p : pairs) {
MetadataValue* metadataValue = metadata.add_metadata();
metadataValue->set_key(std::string(p.first));
// I don't know how to set the value for google.protobuf.Value
}
}
请问我的做法是否正确?在上述情况下是否有更好的选择以及如何设置 google.protobuf.Value ?非常感谢带有答案的简单代码片段。
我认为这段代码有效,我刚刚检查了协议生成的 API。
如果typeof(p.second)
不是google::protobuf::Value
,你需要添加转换如
auto v = google::protobuf::Value();
v.set_number_value(p.second);
// or p.second is string
// v.set_string_value(p.second);
Metadata metadata;
if (buffer.has_value()) {
auto pairs = buffer.value()->pairs();
for (auto &p : pairs) {
MetadataValue* metadataValue = metadata.add_metadata();
metadataValue->set_key(std::string(p.first));
*metadataValue->mutable_value() = p.second;
// I don't know how to set the value for google.protobuf.Value
}
}
我正在使用 protoc
版本 3
syntax = "proto3";
import "google/protobuf/struct.proto";
message MetadataValue {
string key = 1;
google.protobuf.Value value = 2;
}
message Metadata {
repeated MetadataValue metadata = 1;
}
我需要使用 C++ 中的序列化键值对构建以下 Metadata
消息。
message MetadataValue {
string key = 1;
google.protobuf.Value value = 2;
}
message Metadata {
repeated MetadataValue metadata = 1;
}
所以我可以从 C++ 中的以下 for 语句中获得 MetadataValue
的值。
Metadata metadata;
if (buffer.has_value()) {
auto pairs = buffer.value()->pairs();
for (auto &p : pairs) {
MetadataValue* metadataValue = metadata.add_metadata();
metadataValue->set_key(std::string(p.first));
// I don't know how to set the value for google.protobuf.Value
}
}
请问我的做法是否正确?在上述情况下是否有更好的选择以及如何设置 google.protobuf.Value ?非常感谢带有答案的简单代码片段。
我认为这段代码有效,我刚刚检查了协议生成的 API。
如果typeof(p.second)
不是google::protobuf::Value
,你需要添加转换如
auto v = google::protobuf::Value();
v.set_number_value(p.second);
// or p.second is string
// v.set_string_value(p.second);
Metadata metadata;
if (buffer.has_value()) {
auto pairs = buffer.value()->pairs();
for (auto &p : pairs) {
MetadataValue* metadataValue = metadata.add_metadata();
metadataValue->set_key(std::string(p.first));
*metadataValue->mutable_value() = p.second;
// I don't know how to set the value for google.protobuf.Value
}
}
我正在使用 protoc
版本 3
syntax = "proto3";
import "google/protobuf/struct.proto";
message MetadataValue {
string key = 1;
google.protobuf.Value value = 2;
}
message Metadata {
repeated MetadataValue metadata = 1;
}