set_、set_allocated_、mutable_、add_的使用
本文中用到的消息结构:
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_的使用相关推荐
- C++ protobuf中对不同消息内容进行赋值的方式(set_、set_allocated_、mutable_、add_的使用)
本文中用到的消息结构: message PointLLHA {// 通用的坐标点(经度纬度朝向高度),所有跟坐标相关的能够用就统一用这个optional double longitude = 1;// ...
- protobuf 中的嵌套消息的使用 主要对set_allocated_和mutable_的使用
protobuf的简单的使用,不过还留下了一个问题,那就是之前主要介绍的都是对简单数据的赋值,简单数据直接采用set_xx()即可,但是如果不是简单变量而是自定义的复合类型变量,就没有简单的set函数 ...
- .net dll反编译源码后,使用vs的正则替换get_和set_
get_([a-zA-Z0-9]+)\((.+)*?\) 替换为 $1 = $2; 以上()中的表示要保留的元素,按顺序分别对应于替换后的$1 $2 *?表示非贪婪匹配防止匹配失败 用于最新版vsco ...
- jedis操作set_在Java中使用jedis操作Set类型
Apache Kafka® 是 一个分布式流处理平台. Apache Kafka 是 一个分布式流处理平台. 1. 可以让你发布和订阅流式的记录. 2. 这一方面与消息队列或者企业消息系统类似. 3. ...
- ceph-deploy mod add_我的世界基座(Pedestals)Mod
基座mod添加了基座和与其对应的各种升级!通过不同的升级,你的基座可以砍树/传输物品/挖矿/传输能量/定向挖掘/扩散药水效果/自动杀怪/物品传输并过滤/种地/垃圾桶/杀创造(作死才能办到)/经验存储/ ...
- 把文件自动add_【Blender】常用Add-Ons
这篇重新发一遍,试问本文具有垃圾广告信息?最担心的事情还是发生了,费劲儿写个技术文章都能算垃圾,可是否把我也当作垃圾看待?没错,我本身就是个垃圾,写的东西全部都是垃圾,试问大人,什么才算不垃圾的信息呢 ...
- java 合并 set_【Java必修课】各种集合类的合并(数组、List、Set、Map)
1 介绍 集合类可谓是学习必知.编程必用.面试必会的,而且集合的操作十分重要:本文主要讲解如何合并集合类,如合并两个数组,合并两个List等.通过例子讲解几种不同的方法,有JDK原生的方法,还有使用第 ...
- python list add_用Python创建List对象类
这是一个基本问题.我正在尝试以下代码:class SMS_store: def __init__(self): self=[] #probably something is wrong here de ...
- python排序函数set_【Python】排列组合itertools 集合set
■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...
最新文章
- python基础语法合集-Python基础语法合集.zip
- 整型(int)转时间格式字符串及页面long型转时间格式字符串
- go语言 recover
- Android LayoutInflater 动态地添加删除View
- 苹果Mac上如何使用预览反转图片?
- html新建盒子,html+css 盒子模式展示(备查)
- 鸿蒙os开机时间,再见了安卓!华为鸿蒙OS 2.0正式登场,开机只需19秒
- cad怎么转换成dwf格式?学会这招,解决98%工作烦恼
- viewstub学习笔记
- 西电微原课设——矩阵式键盘数字密码锁设计
- cad图纸问号怎么转换文字_CAD中文图纸中文字体变成问号怎么办?不慌这几步教你轻松解决...
- Java @link 注释
- How to Become a Straight-A student
- 给公司写了个人脸考勤系统!老大给了三千奖金。同事为啥记恨我?
- 电商直播方案主要有哪些内容?
- Webpack的加载器
- python语言的注释语句引导符不包括什么_以下选项中,哪一个是Python语言中代码注释使用的符号?________...
- COM08 -如何基于Davinci工具配置CAN通信协议栈实战课程【配置方法总述】
- Oracle自治事务处理数据库OCPU可扩展性测试
- 【JAVA今法修真】 第五章 练气百日,筑基三年