本文中用到的消息结构:

message PointLLHA {// 通用的坐标点(经度纬度朝向高度),所有跟坐标相关的能够用就统一用这个optional double longitude = 1;// 经度坐标optional double latitude = 2;// 纬度坐标optional double heading = 3;// 朝向optional double altitude = 4;// 高度optional double timestamp_sec = 5;// 时间戳
}message VehicleHeartbeat {// 无人车的心跳optional bool is_normal = 1;optional PointLLHA vehicle_pose = 2;optional double vehicle_speed = 3;
}message VehicleRoutingInfo {  // 无人车全局路径规划的结果repeated PointLLHA way_points = 1;
}

1.简单(非嵌套)消息内容的赋值
简单的消息内容直接用set_来赋值就行。

赋值方式:

vehicle_heartbeat.set_vehicle_speed(1.2);
2.嵌套消息内容的赋值
自己定义的复杂嵌套消息不能够通过简单的set_来赋值,可采取set_allocated和mutable_两种方式,但是二者的赋值方式是不同的。

使用set_allocated_,赋值的对象需要new出来,不能用局部的,因为这里用的的是对象的指针。当局部的对象被销毁后,就会报错。

错误的赋值方式:

PointLLHA point;
point.set_longitude(116.20);
point.set_latitude(39.56);
vehicle_heartbeat.set_allocated_vehicle_pose(&point);// 这里传入的是一个马上会被销毁的指针

使用mutable_,赋值时候,可以使用局部变量,因为在调用的时,内部做了new操作。

赋值方式1(使用set_allocated_):

PointLLHA *point = new PointLLHA;
point->set_longitude(116.20);
point->set_latitude(39.56);
vehicle_heartbeat.set_allocated_vehicle_pose(point);// 这里传入的是一个指针

赋值方式2(使用mutable_):

PointLLHA point;
point.set_longitude(116.20);
point.set_latitude(39.56);
vehicle_heartbeat.mutable_vehicle_pose()->CopyFrom(point);// 这里传入的是一个变量,mutable内部有一个new函数

3.重复消息内容的赋值
带有repeated字段的消息,通过add_依次赋值。

赋值方式:

// 第一个点
PointLLHA *way_point = vehicle_routing_info.add_way_points();
way_point->set_longitude(116.20);
way_point->set_latitude(39.56);// 第二个点
PointLLHA *way_point = vehicle_routing_info.add_way_points();
way_point->set_longitude(116.21);
way_point->set_latitude(39.57);

set_、set_allocated_、mutable_、add_的使用相关推荐

  1. C++ protobuf中对不同消息内容进行赋值的方式(set_、set_allocated_、mutable_、add_的使用)

    本文中用到的消息结构: message PointLLHA {// 通用的坐标点(经度纬度朝向高度),所有跟坐标相关的能够用就统一用这个optional double longitude = 1;// ...

  2. protobuf 中的嵌套消息的使用 主要对set_allocated_和mutable_的使用

    protobuf的简单的使用,不过还留下了一个问题,那就是之前主要介绍的都是对简单数据的赋值,简单数据直接采用set_xx()即可,但是如果不是简单变量而是自定义的复合类型变量,就没有简单的set函数 ...

  3. .net dll反编译源码后,使用vs的正则替换get_和set_

    get_([a-zA-Z0-9]+)\((.+)*?\) 替换为 $1 = $2; 以上()中的表示要保留的元素,按顺序分别对应于替换后的$1 $2 *?表示非贪婪匹配防止匹配失败 用于最新版vsco ...

  4. jedis操作set_在Java中使用jedis操作Set类型

    Apache Kafka® 是 一个分布式流处理平台. Apache Kafka 是 一个分布式流处理平台. 1. 可以让你发布和订阅流式的记录. 2. 这一方面与消息队列或者企业消息系统类似. 3. ...

  5. ceph-deploy mod add_我的世界基座(Pedestals)Mod

    基座mod添加了基座和与其对应的各种升级!通过不同的升级,你的基座可以砍树/传输物品/挖矿/传输能量/定向挖掘/扩散药水效果/自动杀怪/物品传输并过滤/种地/垃圾桶/杀创造(作死才能办到)/经验存储/ ...

  6. 把文件自动add_【Blender】常用Add-Ons

    这篇重新发一遍,试问本文具有垃圾广告信息?最担心的事情还是发生了,费劲儿写个技术文章都能算垃圾,可是否把我也当作垃圾看待?没错,我本身就是个垃圾,写的东西全部都是垃圾,试问大人,什么才算不垃圾的信息呢 ...

  7. java 合并 set_【Java必修课】各种集合类的合并(数组、List、Set、Map)

    1 介绍 集合类可谓是学习必知.编程必用.面试必会的,而且集合的操作十分重要:本文主要讲解如何合并集合类,如合并两个数组,合并两个List等.通过例子讲解几种不同的方法,有JDK原生的方法,还有使用第 ...

  8. python list add_用Python创建List对象类

    这是一个基本问题.我正在尝试以下代码:class SMS_store: def __init__(self): self=[] #probably something is wrong here de ...

  9. python排序函数set_【Python】排列组合itertools 集合set

    ■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...

最新文章

  1. python基础语法合集-Python基础语法合集.zip
  2. 整型(int)转时间格式字符串及页面long型转时间格式字符串
  3. go语言 recover
  4. Android LayoutInflater 动态地添加删除View
  5. 苹果Mac上如何使用预览反转图片?
  6. html新建盒子,html+css 盒子模式展示(备查)
  7. 鸿蒙os开机时间,再见了安卓!华为鸿蒙OS 2.0正式登场,开机只需19秒
  8. cad怎么转换成dwf格式?学会这招,解决98%工作烦恼
  9. viewstub学习笔记
  10. 西电微原课设——矩阵式键盘数字密码锁设计
  11. cad图纸问号怎么转换文字_CAD中文图纸中文字体变成问号怎么办?不慌这几步教你轻松解决...
  12. Java @link 注释
  13. How to Become a Straight-A student
  14. 给公司写了个人脸考勤系统!老大给了三千奖金。同事为啥记恨我?
  15. 电商直播方案主要有哪些内容?
  16. Webpack的加载器
  17. python语言的注释语句引导符不包括什么_以下选项中,哪一个是Python语言中代码注释使用的符号?________...
  18. COM08 -如何基于Davinci工具配置CAN通信协议栈实战课程【配置方法总述】
  19. Oracle自治事务处理数据库OCPU可扩展性测试
  20. 【JAVA今法修真】 第五章 练气百日,筑基三年

热门文章

  1. 成都速领科技:店铺数据要看哪些
  2. 人工智能一路狂飙现隐忧 过高预期恐催泡沫
  3. python制作英语字典_Python爬虫之自制英汉字典
  4. EF Data Operation With Async Task
  5. 2345浏览器兼容性设置在哪里
  6. 01背包问题(动态规划)
  7. 遍历HashMap的几种方法
  8. 2022年全国大学生数学建模竞赛赛题B组解题参考+代码
  9. CTF中的无线电以及一些取证题目
  10. HBase的协处理器(Coprocessor)、HBase如何使用二级索引、observer协处理器、 endpoint协处理器、Hbase 协处理器加载方式