类厂,变长参数,序列化

这篇具有很好参考价值的文章主要介绍了类厂,变长参数,序列化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的

在记录nav2中的各类信息,保存到文件中,以便后面回放来分析算法的编程中发现。
各种信息记录的数据不同,可能还会有变化,所以决定采用类厂模式,参见C++设计模式入门

记录的基类

有个信息记录的基类,不同的记录对应不同的子类。

enum rcdType{
   
    RT_NA,
    RT_nav2Info,
    RT_controlPt,
    RT_Msg_Cmd_Vel,
    RT_Msg_Carrot,
    RT_Msg_GPath,
    RT_Msg_LPath
};

目前的信息类型,后面估计要有扩展,用类扩展符合封装扩展的模式设计准则

class RcdBase
{
   
public:
    RcdBase(){
   m_rcdType=RT_NA;}
    virtual bool apply_(){
   cout<<"Error:call apply_ in RcdBase instead of in real Rcd !"<<endl;return false;}
    virtual bool SetData_(int vn,...){
   cout<<"Error:call setData_ in RcdBase instead of in real Rcd !"<<endl;return false;}
    virtual bool save2File_(ofstream& ofs){
   cout<<"Error:call save2File_ in RcdBase instead of in real Rcd !"<<endl;return false;}
    friend RcdClaossFactory;
    int m_index;
    int m_timeMs;
    rcdType m_rcdType;
};

上面的是基类文章来源地址https://www.toymoban.com/news/detail-813065.html

子类举例

class Rcd_Msg_Cmd_vel: public RcdBase
{
   
public:
    Rcd_Msg_Cmd_vel(){
   m_rcdType=RT_Msg_Cmd_Vel;}
    ~Rcd_Msg_Cmd_vel(){
   }
    friend ostream& operator<< (ostream& os, const Rcd_Msg_Cmd_vel& obj) {
   
        os <<obj.m_rcdType<<" "<<obj.m_index<<" "<<obj.m_timeMs<<" "<< obj._Vx <<" "<< obj._Va<<endl;
        return os;
    }
    friend istream& operator>>(istream &is, Rcd_Msg_Cmd_vel& obj){
   
        is>>obj.m_index>>obj.m_timeMs>> obj._Vx >>obj._Va;
        return is;
    }
    virtual bool save2File_(ofstream& ofs)

到了这里,关于类厂,变长参数,序列化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java代码审计&原生反序列化&CC链跟踪分析

    希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!   个人博客链接:CH4SER的个人BLOG – Welcome To Ch4ser\\\'s Blog 在前一篇文章我分析了Commons Collections1链​​​​​​​,其中跟链的顺序是:source=gadget=sink,但如果站在漏洞挖掘的角度顺序是倒过来的:sink=gadget=s

    2024年01月24日
    浏览(38)
  • Jboss反序列化远程代码执行漏洞(CVE-2017-12149)

    :Jboss文件下的httplnvoker组件中的Readonly Accessfilter过滤器中的dofilter没有限制来自客户端的序列化数据而进行反序列化。 漏洞影响版本:Jboss5.x Jboss6.x 利用vulhub搭建Jboss cd vulhub cd jboss cd CVE-2017-12149 docker-compose build (若出现镜像问题,直接执行下面命令) docker-compose up -d 访问:h

    2024年02月07日
    浏览(53)
  • 【序列化与反序列化】关于序列化与反序列化MessagePack的实践

    在进行序列化操作之前,我们还对系统进行压测,通过 jvisualvm 分析cpu,线程,垃圾回收情况等;运用火焰图 async-profiler 分析系统性能,找出程序中占用CPU资源时间最长的代码块。 代码放置GitHub:https://github.com/nateshao/leetcode/tree/main/source-code/src/main/java/com/nateshao/source/code/ser

    2024年02月11日
    浏览(57)
  • 【网络】序列化反序列化

    在前文《网络编程套接字》中,我们实现了服务器与客户端之间的字符串通信,这是非常简单的通信,在实际使用的过程中,网络需要传输的不仅仅是字符串,更多的是结构化的数据(类似于 class , struct 类似的数据)。 那么我们应该怎么发送这些结构化的数据呢? 如果我们

    2024年02月05日
    浏览(43)
  • 序列化,反序列化之实例

    介绍文章 __construct() 当一个对象创建时自动调用 __destruct() 当对象被销毁时自动调用 (php绝大多数情况下会自动调用销毁对象) __sleep() 使**用serialize()函数时触发 __wakeup 使用unserialse()**函数时会自动调用 __toString 当一个对象被当作一个字符串被调用 __call() 在对象上下文中调用不

    2024年02月14日
    浏览(45)
  • Qt 对象序列化/反序列化

    阅读本文大概需要 3 分钟 日常开发过程中,避免不了对象序列化和反序列化,如果你使用 Qt 进行开发,那么有一种方法实现起来非常简单和容易。 我们知道 Qt 的元对象系统非常强大,基于此属性我们可以实现对象的序列化和反序列化操作。 比如有一个学生类,包含以下几

    2024年02月13日
    浏览(42)
  • 【网络】协议定制+序列化/反序列化

    如果光看定义很难理解序列化的意义,那么我们可以从另一个角度来推导出什么是序列化, 那么究竟序列化的目的是什么? 其实序列化最终的目的是为了对象可以 跨平台存储,和进行网络传输 。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是

    2024年02月08日
    浏览(43)
  • 协议,序列化,反序列化,Json

    协议究竟是什么呢?首先得知道主机之间的网络通信交互的是什么数据,像平时使用聊天APP聊天可以清楚,用户看到的不仅仅是聊天的文字,还能够看到用户的头像昵称等其他属性。也就可以证明网络通信不仅仅是交互字符串那么简单。事实上网络通信还可能会通过一个结构

    2024年02月13日
    浏览(40)
  • Spring Boot 序列化、反序列化

    在软件开发中,序列化和反序列化是一种将对象转换为字节流以便存储或传输的机制。序列化将对象转换为字节流,而反序列化则将字节流转换为对象。序列化和反序列化在许多应用场景中都起着重要的作用,比如在网络通信中传输对象、将对象存储到数据库中、实现分布式

    2024年02月15日
    浏览(43)
  • 【Linux】序列化和反序列化

    在网络编程中,直接使用 结构体 进行数据传输会出错,因为 本质上socket无法传输结构体 ,我们只有将结构体装换为字节数组,或者是字符串格式来传输,然后对端主机收到了数据,再将其转化为结构体,这就是序列化和反序列化的过程! 序列化 (Serialization)是将对象的状态

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包