gpt4 book ai didi

c++ - 按名称创建 Protobuf 消息对象

转载 作者:太空狗 更新时间:2023-10-29 19:45:40 27 4
gpt4 key购买 nike

我有很多 protobuf 消息,我目前使用手动编写的查找函数按其名称生成消息。随着项目的发展,消息越来越多,我已经厌倦了手动维护这个查找代码。

那么,有没有办法自动化这个过程呢?也许使用 protoc 插件向 protobuf 代码添加一些代码,以便它可以自行注册?

最佳答案

C++ Protobuf 库已经为编译成二进制文件的所有类型维护了一个“描述符”池。

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.descriptor#DescriptorPool.generated_pool.details

所以,你可以这样做:

google::protobuf::Descriptor* desc =
google::protobuf::DescriptorPool::generated_pool()
->FindMessageTypeByName("mypkg.MyType");
assert(desc != NULL);

该库还维护一个对象,可用于构造任何已编译类型的实例,给定其描述符:

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message#MessageFactory.generated_factory.details

所以你会这样做:

google::protobuf::Message* message =
google::protobuf::MessageFactory::generated_factory()
->GetPrototype(desc)->New();

关于c++ - 按名称创建 Protobuf 消息对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960871/

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