1.1 逐一赋值
定义protobuf结构如下:
message person {
required int32 age = 1;
required string name = 2;
}
message family {
repeated person person = 1;
}
对person进行赋值的方法如下:
int main(int argc, char* argv[])
{
google_protobuf_verify_version;
family family;
person* person;
// 添加一个家庭成员,john
person = family.add_person();
person->set_age(25);
person->set_name("john");
// 添加一个家庭成员,lucy
person = family.add_person();
person->set_age(23);
person->set_name("lucy");
// 添加一个家庭成员,tony
person = family.add_person();
person->set_age(2);
person->set_name("tony");
// 显示所有家庭成员
int size = family.person_size();
cout << "这个家庭有 " << size << " 个成员,如下:" << endl;
for(int i=0; i
还可以用类似与vector中的pushback方法逐一添加person。
1.2 整体赋值
将整个vector类型的变量整体赋值给repeated类型的变量。
定义protobuf结构如下:
message vehiclenavigationstage {
enum navigationmode{
static_destination = 0;
dynamic_destination = 1;
path_patrolling = 2;
}
optional navigationmode navigation_mode = 1;// 导航的模式
optional pointllha destination_point = 2;// 目标点
repeated vehiclemissionpoint mission_points = 3;// 途经点
optional double lateral_offset = 4;// 相对于目标的横向偏差
optional double longitudinal_offset = 5; // 相对于目标的纵向偏差
optional double speed_limit = 6;// 速度限制
}
对mission_points进行赋值的方法如下:
std::vector mission_points;
vehiclenavigationstage navigation_stage;
navigaion_stage.mutable_mission_points()->copyfrom({
mission_points.begin(), mission_points.end()});
在c 中通常用vector来存repeated类型的变量,所以将repeated类性的变量赋值给vector类型的变量也是常见的用法。
定义protobuf结构如下:
message vehiclenavigationstage {
enum navigationmode{
static_destination = 0;
dynamic_destination = 1;
path_patrolling = 2;
}
optional navigationmode navigation_mode = 1;// 导航的模式
optional pointllha destination_point = 2;// 目标点
repeated vehiclemissionpoint mission_points = 3;// 途经点
optional double lateral_offset = 4;// 相对于目标的横向偏差
optional double longitudinal_offset = 5; // 相对于目标的纵向偏差
optional double speed_limit = 6;// 速度限制
}
将mission_points赋值给vector型变量的方法如下:
std::vector mission_points;
vehiclenavigationstage navigation_stage;
for (int i = 0; i < navigation_stage.mission_points_size(); i ) {
mission_points.push_back(navigation_stage.mission_points(i));
}