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

编程入门 行业动态 更新时间:2024-10-26 13:34:32

解决项目开发过程需要<a href=https://www.elefans.com/category/jswz/34/1771377.html style=多个if else的情况"/>

解决项目开发过程需要多个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函数里加一行。

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

更多推荐

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

本文发布于:2023-11-15 09:14:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1597276.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   过程   情况   项目

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!