访问协议缓冲扩展字段

v78*_*v78 6 c++ inheritance protocol-buffers c++11

我正在使用C++中的协议缓冲区.我的邮件只有一个扩展名范围.我想只使用他们的号码访问所有扩展字段而不知道他们的名字.我怎样才能做到这一点??

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

extend Base{
    optional int32 id2 = 1000;
}
Run Code Online (Sandbox Code Playgroud)

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

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

但我不知道如何获得Fielddescriptor*扩展.

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

v78*_*v78 2

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

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

std::cerr << "cfield->name() " << cfield->name() << std::endl;
Run Code Online (Sandbox Code Playgroud)

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

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