我只是想知道,爲什麼有人沒有經歷我最近與google protobufs有關的問題,但是經過大量的搜索後,閱讀了google手冊頁的文檔並搜索在Stackoverflow-DB中,我沒有找到解決方案。更改C++中現有protobuf消息的元素
我在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();
它的子對象,作爲一個將違反自動生成的protobuf的消息的常量的要求,它是不允許在const對象上調用setter方法:error: passing xxx as 'this' argument of xxx discards qualifiers
我將不勝感激任何有創意的解決方案,以避免實現上面發佈的遞歸new-set_allocated-delete
代碼。
在此先感謝
如果你只想給一些子消息'c'分配一個新的值,那麼你可以用=來做一個常規的賦值:'* b.mutable_c()= other_c;' –
你說得對標準吸氣劑與可變吸收劑;這只是一個讀/寫的區別。 –
就是這樣。謝謝你的努力。 – Weana