如何将重复字段部分合并到消息中
How to partly merge repeated field into message?
我有两条相同类型的消息MyMSG
,我们将其称为A
和B
:
message MyMSG {
repeated int msg_bucket = 1;
}
我想将A
中的一个msg_bucket
(仅一个,例如A.msg_bucket(0)
)复制到B
中。不是CCD_ 8而是部分合并。
我应该使用哪个功能?
饰演Marc Gravell♦他指出,不存在自动性。
最简单的方法是,简单地将一个新的msg_bucket
添加到您希望将其"合并"到(B
)中的容器中,然后分配相应的值,或者在您有消息而不是int的情况下进行复制。
另一种方法是将B
序列化到一个容器中,创建一个新的MyMSG C
,它只包含要合并的字段,将该新容器的序列化附加到序列化的B
中,最后从序列化的数据中解析B
。
MyMSG A, B, C; //considered initialized as described above
std::vector<char> serializedContainer(500);
B.SerializeToArray(serializedContainer.data(), serializedContainer.size());
C.SerializeToArray(serializedContainer.data() + B.ByteSize(), serializedContainer.size() - B.ByteSize());
B.ParseFromArray(serializedContainer.data(), B.ByteSize() + C.ByteSize());
要做到这一点,您应该创建一个单独的MyMSG
实例,该实例具有仅要序列化的msg_bucket
值,并序列化该实例。据我所知,没有一个库具有API,允许您指示现有列表中的谨慎项以进行序列化("请仅索引0、7和42")。
相关文章:
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 使用C++程序合并排序没有得到正确的输出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- 用于合并排序的合并函数
- 在声明中合并两个常量"std::set"(不是在运行时)
- ROS2 动态消息模板
- 如何将一个数组值合并为一个整数c++
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- C++秘密消息学校作业
- 将向量的 N 段合并到位C++
- glad 导致 glfwSwapBuffers 返回错误消息
- 烦人的错误消息:无法合并以前的GCDA文件
- 如何将重复字段部分合并到消息中
- 在fastCGI中重定向url时合并消息体
- 尝试将两个类似的printf样式的调试消息合并到一个函数中