gpt4 book ai didi

c++ - 使用反射在 protobuf 中设置重复字段

转载 作者:行者123 更新时间:2023-11-30 02:27:12 24 4
gpt4 key购买 nike

我有一个类似这样的 protobuf 消息:

message foo {
repeated double values = 1;
}

我正在使用反射(如 here 所述)在我的 C++ 代码中设置这样的值

auto desc = protoMsg.GetDescription();
auto refl = protoMsg.GetReflection();
auto fd = desc->FindFieldByNumber(1); // run time value

assert(fd->is_repeated());
for (int i = 0; i < vect.size(); ++i)
refl->SetRepeatedDouble(&protoMsg, fd, i, vect[i]);

我的应用程序在 SetRepeatedDouble 函数内崩溃。以前有没有人试过做这样的事情? (使用反射设置值?请注意,由于我的应用程序的动态特性,我必须使用反射。我已经稍微简化了上面的代码,暂时不这样做)

也欢迎任何有关如何调试的提示。

最佳答案

SetRepeatedDouble() 覆盖数组中已经存在的元素。为了让您的代码正常工作,重复字段的大小必须至少等于 vect.size(),否则您将超出数组,这确实会导致崩溃(或更糟)。如果您从空消息实例开始,那么您需要添加值而不是设置它们,如下所示:

for (int i = 0; i < vect.size(); ++i)
refl->AddDouble(&protoMsg, fd, vect[i]);

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

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