gpt4 book ai didi

c++ - 使用反射在 protobuf 消息中设置 oneof

转载 作者:行者123 更新时间:2023-11-28 04:40:27 25 4
gpt4 key购买 nike

几个小时后,我仍然无法在 C++ 中使用反射在清晰(刚刚创建的)protobuf 消息中设置 oneof 字段。

我可以获得所需的OneOfDescriptor通过Descriptor的消息。但是当我尝试使用 Reflection 来“设置”oneof 时,我发现了真正的问题。与OneOfDescriptor相关的函数成员只有三个:

所以没有SetOneofFieldDescriptor,如果消息中的oneof之前没有定义,则使用消息中的mutable_XXXX函数成员, GetOneofFieldDescriptor 返回 nullptr

因此我真的被困住了,欢迎任何想法。

提前致谢。

最佳答案

如果它不是 oneof 的一部分,您可以像设置字段一样设置它.获取FieldDescriptor来自消息的Descriptor并将其传递给适当的 SetXXX消息的方法 Reflection .

收到如下消息:

message Foo
{
oneof bar
{
int32 a = 1;
string b = 2;
}
}

您可以设置 a成员如下:

#include "foo.pb.h"

int main()
{
Foo f;
const google::protobuf::Descriptor* d = f.GetDescriptor();
const google::protobuf::FieldDescriptor* a = d->FindFieldByName("a");

const google::protobuf::Reflection* r = f.GetReflection();
r->SetInt32(&f, a, 42);
}

Protobuf 将负责确保 oneof 的任何先前设置的成员根据需要取消设置。

关于c++ - 使用反射在 protobuf 消息中设置 oneof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50274477/

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