1. 程式人生 > >protobuf巢狀結構定義的賦值問題

protobuf巢狀結構定義的賦值問題

protobuf巢狀結構定義

示例協議檔案:

demo.proto:
syntax = "proto3";
package demo;  
message Point {  
    float posX = 1;  
    float posY = 2;  
    float posZ = 3;  
} 

message Layer {
  bytes name = 1;
}

message Draw {
  repeated Layer layers = 1;
  Point centerpoint = 2;
}

protoc編譯出c++的檔案
使用時發現:
對於可重複的Layer可以使用add_layers()賦值,但是centrpoint卻沒有類似set或add的方式賦值。

開啟demo.pb.h搜尋一下,發現centrpoint只有兩個疑似的函式set_allocated_centerpoint()和mutable_centerpoint(),後續查閱發現,這兩個函式都能設定centpoint值

兩種方式:
mutable_centerpoint:

demo::Point *p; 
demo::Draw draw;
p = draw.mutable_centerpoint(); //返回指標
p->set_posx(22);
printf("%f\n", draw.centerpoint().posx());

set_allocated_centerpoint():

demo::Draw draw;
demo::Point *p = new gdpdraw::Point; 
p->set_posx(22);
draw.set_allocated_centerpoint(p);
printf("%f\n", draw.centerpoint().posx());