【C++ protobuf中对不同消息内容进行赋值的方式】
本文中用到的消息结构:
message PointNameInfo {
optional double longitude = 1;// 经度坐标
optional double latitude = 2;// 纬度坐标
optional uint64 timestamp_sec = 3;// 时间戳
optional uint32 scale = 4;
optional string name = 5;
}
message PointInfo {
optional bool hasPointName = 1;
optional bool hasPointIcon = 2;
optional PointNameInfo point= 3;
optional PointCode pointCode = 4;
}
message SearchResultList {
repeated Point result_points = 1;
}
enum PointCode
{
POINT_CODE_BMD_POINT = 0;
CAR = 1;
COMPASS = 2;
ROAD_NAME = 3;
ROAD_NUMBER = 4;
POI = 5;
}
1.简单(非嵌套)消息内容的赋值
简单的消息内容直接用set_来赋值就行。
赋值方式:
PointNameInfo pointNameInfo;
pointNameInfo.set_name("car");
2.嵌套消息内容的赋值
自己定义的复杂嵌套消息不能够通过简单的set_来赋值,可采取set_allocated和mutable_两种方式,但是二者的赋值方式是不同的。
使用set_allocated_,赋值的对象需要new出来,不能用局部的,因为这里用的的是对象的指针。当局部的对象被销毁后,就会报错。
错误的赋值方式:
1 2 3 4 |
|
使用mutable_,赋值时候,可以使用局部变量,因为在调用的时,内部做了new操作。
赋值方式1(使用set_allocated_):
1 2 3 4 |
|
赋值方式2(使用mutable_):
1 2 3 4 |
|
3.重复消息内容的赋值
带有repeated字段的消息,通过add_依次赋值。
赋值方式:
1 2 3 4 5 6 7 8 9 |
|