【CI130x 离在线】C++事件驱动模式编程

news/2025/11/10 23:34:00/文章来源:https://www.cnblogs.com/FBsharl/p/19208588
void VCMCoreClient::initializeEventHandlers() {eventHandlers = {{VCMSignal::BaiduError, [this]() { handleBaiduError(); }},{VCMSignal::BaiduReady, [this]() { handleBaiduReady(); }},{VCMSignal::CapturedWakeWord, [this]() { handleCapturedWakeWord(); }},{VCMSignal::BaiduPlaying, [this]() { handleBaiduPlaying(); }},{VCMSignal::BaiduEndDetected, [this]() { handleBaiduEndDetected(); }},{VCMSignal::HandleDone, [this]() { handleHandleDone(); }},{VCMSignal::ResponseHandled, [this]() { handleResponseHandled(); }}};
}

这个C++程序代表一个事件处理器的初始化函数

程序功能:

  • 创建一个事件处理器映射表,将不同的信号枚举值映射到对应的Lambda处理函数

  • 使用C++11的统一初始化语法来初始化 eventHandlers 容器

关于"第一项是不是必须递增":

不是必须递增的。这里的"第一项"指的是每行中的枚举值:

cpp
{VCMSignal::BaiduError, [this]() { handleBaiduError(); }},
{VCMSignal::BaiduReady, [this]() { handleBaiduReady(); }},
// ...

这些枚举值:

  • 不需要递增 - 它们只是不同的信号类型标识符

  • 顺序无关紧要 - 可以按任意顺序排列

  • 类型是枚举常量 - 不是数字序列

代码结构解析:

// 键值对结构:{信号枚举, Lambda函数}
{Key, Value}// Key: VCMSignal::BaiduError 等枚举值
// Value: [this]() { ... } 捕获this的Lambda表达式

这是一个典型的事件驱动编程模式,用于建立信号与处理函数的对应关系。

 

 
 
结构体如下:
class VCMCoreClient {
public:/*** @brief 构造函数* * 初始化状态机,设置初始状态为 Idle,并初始化事件处理器。*/VCMCoreClient();/*** @brief 处理信号事件(枚举版本)* * 根据当前状态和接收到的信号,执行相应的状态转换逻辑。* * @param signal 接收到的信号*/void onEvent(VCMSignal signal);void setState(VCMState newState);VCMState getState() const;private:VCMState currentState;  ///< 当前状态机状态/// 事件处理映射表,将信号映射到对应的处理函数(状态机最关键的部分)std::map<VCMSignal, std::function<void()>> eventHandlers;/*** @brief 初始化事件处理器* * 设置所有信号对应的处理函数。*/void initializeEventHandlers();/*** @brief 处理xxx信号* */void handleXXXSignal();}
 

 应用上面结构的处理信号事件函数如下:

/**
 * @brief 处理信号事件(枚举版本)
 *
 * 查找信号对应的处理函数并执行,如果信号未注册则输出警告信息。
 *
 * @param signal 接收到的信号
 */
void VCMCoreClient::onEvent(VCMSignal signal) {
    if (eventHandlers.find(signal) != eventHandlers.end()) {
        eventHandlers[signal]();
    } else {
        std::cout << "[VCM] Unknown signal: " << signalToString(signal) << std::endl;
    }
}
 

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

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

相关文章

推荐一种异步线程执行过程中更新进度的方法

在实际应用中,对于耗时比较长或者耗费性能的操作,为了避免UI卡顿,通常采用后台线程的方式进行处理,但用户需要知道当前操作的执行进度(如当前进度是百分比),以及一些更详细的过程信息(如共分5步,当前是正在执…

2025 年 11 月食堂承包厂家推荐排行榜,学校食堂承包,工厂食堂承包,企业单位食堂承包,医院工地科技园食堂承包公司精选

2025年食堂承包行业深度解析:专业服务商综合评估与选择指南 行业现状与发展趋势 随着社会专业化分工的不断深化,食堂承包行业已发展成为涵盖多领域、多业态的综合性服务产业。从学校到工厂,从企业到医院,从科技园到…

希尔排序快速排序归并排序

希尔排序:插入排序的改良版,先取一个增量d,d=n/2,再从数列的第一个元素开始,每隔d个取数,将这几个数排序,再将d/2,依旧从第一个数开始,相隔d取数排序,直到d取1,一定可以将原数列排列完整。相比于插入排序,…

2025 年 11 月电源适配器厂家推荐排行榜,12V2A电源适配器,12V电源适配器,24V电源适配器,笔记本电源适配器公司推荐

2025 年 11 月电源适配器厂家推荐排行榜:12V2A电源适配器、12V电源适配器、24V电源适配器、笔记本电源适配器公司推荐 行业背景分析 随着全球电子设备市场的持续扩张,电源适配器作为关键配套设备的重要性日益凸显。根…

shadcn之表单

前言 shadcn表单相关的了解,可知道 shadcn 目前推出了3种方式来处理表单(毕竟shadcn只做ui,要想处理好完整表单就涉及到可控、校验等问题):react-hook-form、tanstack、useActionStatereact-hook-form版本 use cl…

2025 年 11 月粘度计厂家推荐排行榜,在线粘度计,旋转粘度计,振动粘度计,实验室旋转粘度计,反应釜在线粘度计公司推荐

2025年粘度计行业权威推荐榜单:在线、旋转、振动粘度计厂家综合评测 一、行业背景与发展现状 粘度测量作为工业过程控制和实验室分析的关键环节,在石油化工、食品制药、新材料研发等领域具有不可替代的重要地位。随着…

Numpy - numpy.random.randn()

Numpy - numpy.random.randn()What does numpy.random.randn() do? ChatGPT said:numpy.random.randn() is a function in NumPy that generates random numbers from a standard normal distribution — also known …

flask: 用Flask-Uploads实现文件上传

一,安装第三方库 $ pip install Flask-Uploads 二,代码 app.py #先导入次此处需要用到的库: from flask_uploads import UploadSet, IMAGES, configure_uploads, ALL,patch_request_class# 配置文件上传到的路径,以…

AI元人文:交织的智慧——应对价值困境的四条路径

AI元人文:交织的智慧——应对价值困境的四条路径 价值的不可通约性,如同横亘在人工智能与人类文明协作道路上的一道哲学深渊。它宣告了寻求“唯一正解”的传统范式——即“价值对齐”——的破产。在这一思想困局中,…

光学神经网络

📘 全光学神经网络(All-Optical Neural Networks, AONN)学习清单 ——论文 + 源码 + 学习顺序推荐(适合从你当前AFNN水平向更高层深入)🥇 阶段 1:入门与经典模型(了解光学实现神经网络的原理) 1️⃣ 《All-…

2025 年 11 月疥螨阴虱药剂厂家推荐排行榜,扑灭司林,苯甲酸苄酯,胺氯菊百灭宁,科灭达专业配方高效灭杀方案公司推荐

2025 年 11 月疥螨阴虱药剂厂家推荐排行榜:扑灭司林、苯甲酸苄酯、胺氯菊百灭宁、科灭达专业配方高效灭杀方案公司推荐 行业背景与发展现状 疥螨和阴虱感染作为常见的皮肤寄生虫病,在全球范围内持续影响着公共卫生安…

黑马点评优雅关闭服务

最近发现每次关闭时,会报错关于pending——list的报错 原因是线程还在进行,但是连接已经关闭了 解决也很简单 直接写一个@PreDestroy即可 @PreDestroy public void shutdown() { SECKILL_ORDER_EXECUTOR.shutdown();…

01-03 设计模式 - 导学

2023-11-14 01 为什么学设计模式?世上本没有路,走的人多了,便变成了路。在程序员的世界中,本没有设计模式,写代码是人多了,他们便总结出了一套能提高开发和维护效率的套路360行干一行爱一行,作为一个搞技术的,…

2025 年 11 月冲压件厂家推荐排行榜,新能源冲压件,光伏冲压件,精密冲压件,异形冲压件,五金冲压件,铝冲压件,汽配冲压件,不锈钢冲压件,家具冲压件公司推荐

2025年11月冲压件厂家推荐排行榜:新能源、光伏、精密等冲压件企业权威评测 行业背景与发展趋势 冲压加工作为现代制造业的基础工艺,在汽车、新能源、光伏、家电等领域发挥着不可替代的作用。随着产业升级和技术进步,…

Day17内容溢出overflow属性

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

日总结 24

业务图关注 “谁” 和 “什么” ,是描述业务价值交换的静态结构图。活动图关注 “如何” ,是描述业务流程执行步骤的动态行为图。 关键区别精要目的不同业务图:定义商业模式,说明参与者之间如何创造和交换价值…

谷歌广告生态指南:AdSense/GAM 接入避坑 + 填充监听 + 问题排查

作为长期负责海外业务的开发者,公司业务中经常会和谷歌的人员有沟通。在接入谷歌广告生态时,踩了很多坑,很多坑都是和谷歌的技术人员沟通后才发现问题的(有些最新情况和文档不一致,很坑)。📊 1. AdSense 与 Ad…

P4511 日程管理

题目大意: 你现在有 \(n\) 个任务,每个任务有 \(t_{i},p_{i}\),表示你如果能在前 \(t_{i}\) 天做完这个任务,那么你会有 \(p_{i}\) 的收益,每个任务都要恰好做一天。 任务是善变的,一开始没有任何任务,你要维护…

11.10学习总结

总结 一、类和对象---封装 实例 class circle{ //访问权限 public: //属性 int r; //行为 double c{ double C=2*PI*r; return C; } } int main(){ //通过类,定义一个对象,这个过程叫做实例化 circle c1; //…

新编故事 | 噪音

0x00 网络操作中心里没有天气。 这里只有恒定的21摄氏度,和一种被空气过滤器反复过滤的、干燥的空气。L称之为“罐头空气”。 墙上是一整面巨大的拼接屏,上面是数据港的实时流量图。那上面奔涌的线条,就是这座城市的…