我只是想知道,为什么没有人解决我最近遇到的与 google protobufs 相关的问题,但是经过广泛的谷歌搜索、阅读 google 手册页的文档并在 Stackoverflow-DB 中搜索后,我没有找到解决方案。
我在 Ubuntu 14.04.3 LTS 上使用 proto2-c++-API,通过 cmake 文件使用 gcc/g++ 进行编译。
我有一个从文件中读取二进制(序列化)谷歌协议缓冲区消息的应用程序。然后程序的目的是将消息(没有反序列化)发送到另一个应用程序,该应用程序继续处理实际数据。
我现在想修改一些消息,从文件中读取,以便测试第二个应用程序的功能。不幸的是,我的消息包含很多嵌套消息,所以在反序列化后我必须调用类似
message().a().b().c()....x().value();
能够处理实际数据。
我现在的问题是,如何在x
不创建另一个类型的消息的情况下更改值message
,我还必须创建所有子消息(a,b,c...
)并将它们分配给相应的前任,如下面的伪代码所示?!
a = new a();
b = new b();
c = new c();
...
v = new v();
w = new w();
x = new x();
x.set_value();
w.set_allocated_x_value(x);
v.set_allocated_w_value(w);
...
a.set_allocated_b_value(b);
message.set_allocated_a_value(a);
...
/* forward message to second application */
...
delete x;
delete w;
...
delete a;
显然,不可能set_value
直接调用message
-objects,分别调用它的子对象message().a().b().c()....x().set_value();
,如对象: 错误:将 xxx 作为 xxx 的“this”参数传递会丢弃限定符
我将不胜感激任何创造性的解决方案,以避免实现new-set_allocated-delete
上面发布的递归代码。
提前致谢