解决项目开发过程需要多个if else的情况

项目开发过程中虽然不建议使用过多的if-else-else if,但是总有一些情况是避免不了,举一个例子:

struct DataBase
{std::string type_;
};void Update(DataBase _data)
{if (_data.type_ == "UiSCLKey"){}else if (_data.type_ == "UiRadarKey"){}else if (_data.type_ == "UiChartKey"){}
}

比如像这种情况,Update函数是一个接口,外部调用该接口给该模块传输zmq的数据,模块拿到这个数据需要判断该数据是哪个topic发出来的数据,对不同的数据做不同的处理,在一个项目开发过程中我们需要接收的数据非常多,topic也非常多,我们不可能每次都通过这种if-else去判断这个数据是属于哪个topic,这太傻了,所以我们可以用映射表这样的方式。

它就是一个unordered_map,key值是topic,value值就是要处理的函数,这样我们在接收到数据的时候直接判断key值存不存在,存在的话就调用函数处理。

写法如下:

// 传输数据的结构体
struct DataBase
{std::string type_;
};// 处理zmq数据
void UiSclData(DataBase _data)
{}void UiRadarData(DataBase _data)
{}void UiChartData(DataBase _data)
{}// 成员变量
std::unordered_map<std::string, std::function<void(DataBase _data)>> data_map_;// 注册
void Register()
{data_map_["UiSCLKey"] = UiSclData;data_map_["UiRadarKey"] = UiRadarData;data_map_["UiChartKey"] = UiChartData;
}// 接口,外部调用传输数据
void Update(DataBase _data)
{if (data_map_.find(_data.type_) != data_map_.end())data_map_[_data.type_](_data);
}

data_map_是成员变量,Register函数可以在订阅数据的函数里调用,每次要订阅一个topic数据时在Register函数里加一行。

但是这样有个弊端,那就是所有处理数据的函数参数必须一致,返回值必须一致,所以有利有弊,看情况使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 22.04 安装水星无线 USB 网卡

我的 USB 网卡是水星 Mercury 的&#xff0c; 在 Ubuntu 22.04 下面没有自动识别。 没有无线网卡的时候只能用有线接到路由器上&#xff0c;非常不方便。 寻思着把无线网卡驱动装好。折腾了几个小时装好了驱动。 1.检查网卡类型 & 安装驱动 使用 lsusb 看到的不一定是准确…

法治智能起航 | 拓世法宝AI智慧政务一体机重塑法治格局,开启智能司法新篇章

在科技的巨轮推动下&#xff0c;我们的社会正快速迈向一个以数据和智能为核心的新时代。在这个波澜壮阔的变革中&#xff0c;人工智能&#xff08;AI&#xff09;显得尤为突出&#xff0c;它不仅是科技进步的象征&#xff0c;更是未来发展的助力者。 2023年&#xff0c;最高人…

linux 3.13版本nvme驱动阅读记录四

这里记录下在nvme_probe函数调用misc_register函数的总结。 static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) {//... create_cdev://利用miscdev结构体提供一些字符设备的操作(回调函数)&#xff0c;用户空间可以下发一些nvme的命令等scnprintf…

医学影像系统源码(MRI、CT三维重建)

一、MRI概述 核磁共振成像&#xff08;英语&#xff1a;Nuclear Magnetic Resonance Imaging&#xff0c;简称NMRI&#xff09;&#xff0c;又称自旋成像&#xff08;英语&#xff1a;spin imaging&#xff09;&#xff0c;也称磁共振成像&#xff08;Magnetic Resonance Imag…

Labview利用声卡捕获波形

一般的计算机上自带的声卡&#xff0c;均既有A/D功能&#xff0c;又有D/A功能&#xff0c;就是一款具备基本配置的数据采集卡&#xff0c;并且技术成熟&#xff0c;性能稳定。 后台如下&#xff1a;

【Word自定义配置,超简单,图文并茂】自定义Word中的默认配置,比如标题大小与颜色(参考科研作图配色),正文字体等

▚ 01 自定义样式Styles中的默认标题模板 &#x1f4e2;自定义标题的显示效果&#xff0c;如下图所示&#xff1a; 1.1 自定义标题的模板Normal.dotm 1.1.1 选择所需修改的标题 新建一个空白Word文档&#xff0c;依次选择菜单栏的开始Home&#xff0c;样式Styles&#xff0c;…

低代码信创开发核心技术(三):MDA模型驱动架构及元数据系统设计

前言 写最后一篇文章的时候&#xff0c;我本人其实犹豫了半年&#xff0c;在想是否发布出这篇文章&#xff0c;因为可能会动了很多人的利益。所以这篇文章既是整个低代码信创开发的高度总结&#xff0c;也是最为精华的一部分&#xff0c;它点明了低代码中最为核心的技术。虽然…

光刻掩膜版怎么制作的?

光掩膜版基本上是 IC 设计的“主模板”。掩模版有不同的尺寸。常见尺寸为 6 x 6 英寸一般的掩膜版由石英或玻璃基板组成。光掩膜版涂有不透明薄膜。更复杂的掩模版使用其他材料。 一般来说&#xff0c;术语“photo mask”用于描述与 1X 步进机或光刻系统一起使用的“主模板”。…

Ubuntu 安装常见问题

1. 安装oh my zsh 搜狗输入法不能用 vim /etc/environmentexport XIM_PROGRAMfcitx export XIMfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx export XMODIFIERS“imfcitx” export LANG“zh_CN.UTF-8”配置完后重启&#xff0c;稍等一会&#xff0c;右上角会有个…

Windows下Python及Anaconda的安装与设置之保姆指南

学习Python编程需要安装基本的开发环境。 &#xff08;1&#xff09;python ——编译器&#xff1b;这个是任何语言都需要的&#xff1b;必需&#xff01; &#xff08;2&#xff09;Anaconda ——主要的辅助工具&#xff0c;号称是 Python‘OS&#xff1b;必需&#xff01; …

python机器学习——随机森林

随机森林 随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;它通过构建多个决策树并结合它们的预测结果来进行分类或回归。 算法原理&#xff1a; 决策树&#xff08;Decision Tree&#xff09;: 随机森林由多个决策树组成。决策树是一种基于树…

如何在PPT中去除编辑密码?

&#xff1a;忘记PPT幻灯片密码&#xff1f;最简单的办法在这里&#xff01; 【摘要】&#xff1a;具体步骤如下&#xff1a;第一步百度搜索【密码帝官网】&#xff0c;第二步点击“立即开始”&#xff0c;在用户中心上传文件即可。不用下载软件&#xff0c;手机电脑都可以用。…

Pytorch实战教程(一)-神经网络与模型训练

0. 前言 人工神经网络 (Artificial Neural Network, ANN) 是一种监督学习算法,其灵感来自人类大脑的运作方式。类似于人脑中神经元连接和激活的方式,神经网络接受输入,通过某些函数在网络中进行传递,导致某些后续神经元被激活,从而产生输出。函数越复杂,网络对于输入的数…

云架构师学习------腾讯云通识-存储与数据库

云架构师学习------腾讯云通识-存储与数据库 云架构师学习------腾讯云通识-存储与数据库存储基础存储服务对象存储-COS产品概述功能概览产品优势 云硬盘-CBS产品概述产品功能产品优势云硬盘类型 文件存储-CFS产品概述产品功能产品优势文件存储类型及性能规格存储类型性能与规格…

图论09-桥和割点

文章目录 1 寻找桥的算法2 桥的代码实现3 寻找割点的算法4 割点的代码实现 1 寻找桥的算法 2 桥的代码实现 package Chapt06_Bridge;import java.util.ArrayList;public class FindBridges {private Graph G;private boolean[] visited;//ord数组记录访问的顺序private int or…

51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示 1.主要功能&#xff1a;讲解视频&#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接&#xff08;可点击&#xff09;&#xff1a; 51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲解视…

计蒜客详解合集(2)期

目录 T1126——单词倒排 T1617——地瓜烧 T1612——蒜头君的数字游戏 T1488——旋转单词 T1461——校验信用卡号码 T1437——最大值和次大值 T1126——单词倒排 超级水的一道题&#xff0c;和T1122类似但更简单&#xff0c;分割后逆序输出即可~ 编写程序&#xff0c;读入…

Linux系統下查看处理器信息

在 Linux 系统中&#xff0c;可以使用 lscpu 命令来查看处理器的信息。该命令会显示有关 CPU 架构、核心数、线程数、缓存等级和大小等详细信息。 要使用 lscpu 命令&#xff0c;只需在终端中输入以下命令并按下回车键&#xff1a; lscpu执行后&#xff0c;将显示处理器的相关…

2023最新版本 从零基础入门C++与QT(学习笔记) -2- 命名空间的使用

&#x1f38f;在不同的命名空间变量名可相同 创建(如下方代码块) &#x1f384;分析一下构成 &#x1f388;-1- namespace 关键字命名空间 &#x1f388;-2- wm9 空间名称 &#x1f388;-3-括号里边正常定义变量即可 namespace wm9 {int a 99;char b A;float c 9.99;char…

Harbor(V2.8+) 登录时报错 net/http: TLS handshake timeout

问题描述 最近将harbor从v1.8 升级到v2.8后&#xff0c;客户端在登录时出现了以下问题&#xff1a; net/http: TLS handshake timeout解决方案 由于V2.8版本的nginx代理中只有配置TLSv1.2协议&#xff0c;没有TLSv1.1协议的支持&#xff0c;导致了部分客户端无法的登录。 在…