Protocol buffers 如何从重复类型protobuf创建对象

Protocol buffers 如何从重复类型protobuf创建对象,protocol-buffers,Protocol Buffers,我要找的是一个返回重复字段消息的函数 我知道有Reflection::AddMessage,它具有我想要的返回类型,但我不想添加消息,只需返回该消息的对象即可 下面是我尝试执行的一个示例,假设我在.proto文件中有一条消息: message Bar{ uint32 t x = 1; uint64 t y = 2; } message Foo{ repeated Bar myMessage = 1; } 我正在使用反射来迭代Foo消息,我希望能够做到以下几点: Mes

我要找的是一个返回重复字段消息的函数

我知道有Reflection::AddMessage,它具有我想要的返回类型,但我不想添加消息,只需返回该消息的对象即可

下面是我尝试执行的一个示例,假设我在.proto文件中有一条消息:

message Bar{
    uint32 t x = 1;
    uint64 t y = 2;
}

message Foo{
    repeated Bar myMessage = 1;
}
我正在使用反射来迭代Foo消息,我希望能够做到以下几点:

Message* Msg = createMessage(refl->FooMsg, FieldDesc) 

我知道还有GetRepeatedMessage,但这需要索引。

首先,当protobuf编译器生成用于编译的代码时,接口中会有一个访问器函数。这些函数是Myable NoMeOfO-Meo消息,返回整个重复字段,该字段是一个STD::C++中的vector,或者Mutable NoMeOfOi消息索引,它给出了指定的元素。

现在,若你们不想使用酒吧,那个么你们不需要太多

message ArrayOfBar 
{
    repeated Bar arrayOfBar = 0;

    message Bar{
        uint32 t x = 1;
        uint64 t y = 2;
    }
}
如果这就是你的想法,你也可以这样做

std::vector<Bar> arrayOfBars;
但由于Protobuf的内部细节,这个想法需要改进。这样的事情可能会发生一些不必要的行为