gpt4 book ai didi

c++ - 访问 Protocol Buffer 扩展字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:11 25 4
gpt4 key购买 nike

我正在使用 C++ 中的 Protocol Buffer 。我的消息只有一个扩展范围。我想在不知道他们的名字的情况下访问所有的扩展字段,只使用他们的号码。我该怎么做??

message Base {
optional int32 id = 1;
extensions 1000 to 1999;
}

extend Base{
optional int32 id2 = 1000;
}

到目前为止,我已经获得了ExtensionRange。

const google::protobuf::Descriptor::ExtensionRange* rng = desc->extension_range(0);
std::cerr << "rng " << rng->start << " " << rng->end << std::endl;

但我不知道如何获取扩展的Fielddescriptor*

有一件奇怪的事,那就是 extension_count() 返回 0。虽然我在我的 .proto 文件中使用了扩展名。同样,FindExtensionBy[Name/number] 没有按预期工作?

最佳答案

我找到了一个使用反射的解决方案。

const Reflection* ref = message_.GetReflection(); 
const FieldDescriptor* cfield = ref->FindKnownExtensionByNumber(33);

std::cerr << "cfield->name() " << cfield->name() << std::endl;

现在我现有的解决方案是循环查找扩展范围内的所有数字并获取扩展所需的字段描述符。

我还在等待更好/不同的解决方案,你们。

关于c++ - 访问 Protocol Buffer 扩展字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39851098/

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