c++ - 无法通过 copyin 而不是 set_allocated_something 来设置 protobuf 元素?
问题描述
在我生成的 protobuf 类中,我只看到set_allocated_something
.
例子:
syntax = "proto3";
import "uuid.proto";
import "openvpn.proto";
package message;
message VPN {
UUID uuid = 1;
oneof vpn {
OpenVPN openVPN = 2;
}
}
然后我有:
OpenVPN openVPN;
//fill openVPN
auto vpnAny = someObject.add_vpns();
vpnAny->set_allocated_openvpn(&openVPN);
以下代码崩溃,因为我正在添加一个我拥有数据的对象,然后set_allocated_openvpn
将首先删除它,然后作用域将第二次删除它。
另一种方法是做
OpenVPN* openVPN = new OpenVPN();
但我想避免原始指针 + new
。
为什么 protobuf 根本不会生成复制数据的方法?为什么我只能传递分配的数据指针?我应该如何处理这种情况?
解决方案
Protobuf 为每种类型生成复制构造函数和复制赋值运算符。因此,将消息复制到另一个消息的最正常方法是
OpenVPN openVPN;
// (...)
*someObject.add_vpns() = openVPN;
推荐阅读
- html - Bootstrap 列不会填充剩余高度
- powershell - Powershell复制文件信息
- image - 在颤振项目中上传图像时项目挂起
- sql - elasticsearch canvas,是否有文本输入框查询索引?
- java - 使用spring boot和spring data jpa时OneToMany关系的奇怪行为
- python - 如何获取两个浮点值之间的所有整数?
- pythonanywhere - 如何在 PythonAnywhere 中导入库并在 Python 笔记本中使用它们?
- node.js - Angular 9 npm 'bindings' 请求 'fs' 模块。无法解决
- sql - 根据分组计算空值的百分比
- python - 根据日期减去数据框中的值