当前位置: 首页 > 知识库问答 >
问题:

C google protobuf:如何从扩展的FieldDescriptor创建可变扩展

燕元明
2023-03-14

我有一个proto,它有一条包含扩展名的消息

message MsgA
{
    extensions 10 to 50;
}

我有另一个proto,它有扩展(只显示下面的一个扩展)

extend MsgA
{
    optional MsgB msgB = 10;
}
message MsgB
{
    required int32 value = 1;
}

通过protobuf代码,我能够获得MsgB的描述符和FileDescriptor,并从中检索FieldDescriptor类型的扩展名“MsgB”。我通过protobuf代码查找扩展,而不是使用MsgB协议生成的代码,因为我试图迭代所有扩展消息,而不是将每个消息硬编码为可变扩展。(我理解MutableExtension(MsgB::MsgB)的硬编码方式,但希望使用检索到的扩展)

我想用msgB扩展来填充MsgA的可变扩展,但可变扩展采用了

(const::google::protobuf::internal::ExtensionIdentifier

(const::google::protobuf::internal::ExtensionIdentifier

如何使用找到的msgB扩展名填充/创建MutableExpress,或者如何创建msgB的ExtensionIdfer以用作创建MsgA的MutableExpress的输入?

共有1个答案

逄嘉木
2023-03-14

我想我找到了一种通过反射将扩展到MsgA的方法。

在MsgA对象上,检索反射对象。然后在反射对象上使用MsgA对象和extensions FieldDescriptor对象调用MutableMessage(FileDescriptor对象来自GetDescriptor()-

MsgA* msgObj;
FieldDescriptor* ext = fileDescriptor->extension(indexOfExtension);
auto reflection = msgObj->GetReflection();
reflection->MutableMessage(msgObj, ext);

然后,这将用扩展消息填充MsgA对象,您可以按索引遍历每个扩展,用每个扩展消息填充MsgA对象。

 类似资料:
  • Atom和VisualStudio代码可能是迄今为止最大的电子应用程序,它们都具有很强的可扩展性,还有其他一些较小的例子,如N1。我的意思是,它们支持插件。 问题是:我想我会在谷歌上找到一些关于如何让电子应用程序可扩展的东西,或者那些很酷的“棒极了”列表上的东西,但是我什么也没找到。此外,深入研究这些应用程序的源代码需要一段时间。 我在寻找什么(或): 我不知道的内置功能 类似于电子可扩展的库(假

  • 每个项目都是一个扩展包 一旦你的目录有一个 composer.json 文件,这个目录就是一个包。当你给一个项目添加一个 require 依赖时, 此时你正在创建一个依赖于其他包的包。 项目和扩展包唯一不同之处在于,项目是一个没有名称的包。 为了使该包可安装,你需要指定一个名称, 通过在 composer.json 中添加 name 属性: { "name": "acme/hello-wo

  • 问题内容: 我对项目有一些特定要求,因此决定实施不受管理的Neo4j扩展。 我在Neo4j文档中找到了以下信息: 非托管扩展 测试您的扩展 这看起来是一个好的开始。但是我无法为我工作。 是否有一些更完整的工作示例/模板可以用作参考? 问题答案: “手工”解决方案 TL; DR; - https://github.com/FylmTM/neo4j-unmanaged-extension- templ

  • 问题内容: 我必须安装到docker postgres上 这是我在Shell中执行我的普通命令的需求 如果我删除容器中的那行,它可以工作,但是我必须自己执行安装,并且我必须告诉项目中的每个人都这样做,这不是一个好习惯 这是我的 这是我的码头工人文件 构建后,我无法运行它 题: 如何从dockerfile 安装? 我想制作图像并将其重新用于团队的整个项目 问题答案: 之所以失败是因为Postgres

  • 我试图写一个函数在PostgreSQL在Windows与Python脚本的主体,我运行到一个错误的消息时,试图创建plpythonu扩展。我运行的命令是: 这将生成以下错误消息: 我还试着跑步: 这会导致以下错误: 大蟒蛇。dll文件存在于该位置,但显然缺少一些关键依赖项。我到处都找遍了,没发现有什么有用的。我已经在机器上安装了Python2和Python3。。。

  • 译者:cangyunye 作者: Adam Paszke 修订者: Adam Dziedzic 在这个教程里,我们要完成两个任务: 创建一个无参神经网络层。 这里需要调用numpy作为实现的一部分。 创建一个权重自主优化的伸进网络层。 这里需要调用Scipy作为实现的一部分。 import torch from torch.autograd import Function 无参数示例 这一层并