本文中用到的消息结构:

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);

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

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

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

  2. 存储过程中SELECT与SET对变量赋值

    Create proc insert_book @param1char(10),@param2varchar(20),@param3money,@param4moneyoutput with encr ...

  3. sql server存储过程中SELECT 与 SET 对变量赋值的区别

    SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT. 对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们 并没有注意,其实这 ...

  4. RabbitMQ 中 7 种消息队列

    点击关注公众号,Java干货及时送达 七种模式介绍与应用场景 简单模式(Hello World) 做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B ...

  5. C#中的MessageBox消息对话框

    关键字:C# MessageBox 消息对话框 在程序中,我们经常使用消息对话框给用户一定的信息提示,如在操作过程中遇到错误或程序异常,经常会使用这种方式给用于以提示.在C#中,MessageBox消 ...

  6. 如何禁用请求库中的日志消息?

    本文翻译自:How do I disable log messages from the Requests library? By default, the Requests python libra ...

  7. Spring Cloud Stream同一通道根据消息内容分发不同的消费逻辑

    应用场景 有的时候,我们对于同一通道中的消息处理,会通过判断头信息或者消息内容来做一些差异化处理,比如:可能在消息头信息中带入消息版本号,然后通过if判断来执行不同的处理逻辑,其代码结构可能是这样的: ...

  8. 详解如何实现在线聊天系统中的实时消息获取

    序言 传统web浏览器应用采用客户端主动请求方式,只有在收到浏览器请求时服务端才返回消息,这种模式已经不能满足日益多样化的web应用需求,例如: 在线聊天系统:需要实时获取聊天消息. 实时监控系统:需 ...

  9. VB.net实现从ListView控件中异地获取文本内容源代码

    对于一些VB6工程代码来说,需要完成从VB到VB.net的转换,在转换过程中需要注意很多内容,利用VB.net的直接转换功能很少能完全成功,需要我们付出很大的努力. 下面的VB.net代码实现从其他应 ...

最新文章

  1. java datahandler_Java Web Services:使用DataHandler类发送文件
  2. iOS中的CADisplayLink定时器
  3. strncasecmp的使用
  4. 使用BaaS更快地构建Xamarin应用程序
  5. Eureka 自我保护模式、健康检查机制、Eureka 元数据
  6. 概念梳理:C++中iostream头文件和命名空间的基础介绍和拓展内容
  7. 鸽巢排序(Pigeonhole sort)
  8. 优化方法理论合集(10)——贝尔曼动态管理方法
  9. Angular--*ngFor
  10. 密码应用安全性评估实施要点之二密码技术应用要求与实现要点(4)
  11. 冷月手撕408之操作系统(3)-操作系统的发展及分类
  12. 世界上第一台超越早期经典计算机的光量子计算机诞生,世界上第一台超越早期经典计算机的光量子计算机诞生!是货真价实的“中国造”...
  13. 使用Arduino的LC电表:测量电感和频率
  14. 单片机联网远程控制的服务器设置,经验分享:单片机如何与手机实现远程通讯...
  15. 如何使用几何画板工具箱
  16. JAVA银企直连建设银行云直连模式超详细讲解
  17. 非ie获取当前登录计算机用户,Web系统通过EXE文件实现读取客户电脑MAC等硬件信息且兼容非IE浏览器...
  18. 零基础入门python3.7 ——基础知识总结(十二) 函数进级
  19. 人生苦短我用python壁纸_人生苦短,我用 Python——我如何用 Python 助力工作和生活?...
  20. Metronic+angular8 1. 学习—如何在angular8项目中嵌入Metronic

热门文章

  1. textBox数据填充以及获取
  2. AD09 DXP保姆级教程系列——001、汉化与新建工程
  3. 【电路】MOS管开关电路
  4. 顺序表基本操作算法——基础代码(C语言)
  5. 外贸邮箱如何群发?163vip邮箱怎么收费?群发邮箱软件哪个好用?
  6. 亿级用户游戏排行榜设计方案
  7. java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
  8. WINSERVER CA 发布证书
  9. MySQL数据库实战教程
  10. 媒体融合之架构模型一