当前位置: 首页 > news >正文

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

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.gsyq.cn/news/45948.html

相关文章:

  • 2025 年 11 月食堂承包厂家推荐排行榜,学校食堂承包,工厂食堂承包,企业单位食堂承包,医院工地科技园食堂承包公司精选
  • shadcn之表单
  • 光学神经网络
  • 2025 年 11 月疥螨阴虱药剂厂家推荐排行榜,扑灭司林,苯甲酸苄酯,胺氯菊百灭宁,科灭达专业配方高效灭杀方案公司推荐
  • Day17内容溢出overflow属性
  • 谷歌广告生态指南:AdSense/GAM 接入避坑 + 填充监听 + 问题排查
  • 2025 年 11 月流量计厂家推荐排行榜,热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢/高精度流量计公司推荐
  • 2025 年 11 月聚氨酯厂家推荐排行榜,浇注型聚氨酯,聚氨酯预聚体,聚氨酯胶黏剂,聚氨酯组合料,聚氨酯密封,聚氨酯轮,聚氨酯胶辊,聚氨酯制品公司推荐
  • 2025 年 11 月氢氧化镁厂家推荐排行榜,矿石氢氧化镁,矿石法氢氧化镁,水镁石氢氧化镁,阻燃剂氢氧化镁,改性氢氧化镁公司推荐
  • 20232415 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • Day17清除默认样式
  • 2025 年 11 月磨粉机厂家推荐排行榜,雷蒙磨粉机,环辊磨粉机,摆式磨粉机,矿石磨粉机,超细磨粉机,高压磨粉机公司推荐
  • 详细介绍:探究微波消解仪如何创新现代实验室的样品前处理流程
  • 爆肝!Oracle RAC 日常运维命令总结
  • 详细介绍:线性代数 几何意义 | 基础、向量、行列式与线性方程组(上篇)
  • 在Zabbix中修改Web页面显示名称
  • 20232406 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 2025 年 11 月危险品运输厂家推荐排行榜,危险品运输车,危险品运输罐,危险品运输物流,危险品运输公司专业实力与安全服务深度解析
  • 对于生成虚tree进行DP——CF1097G Vladislav and a Great Legend
  • 使用napi-rs,通过node调用rust代码
  • 智语写作都有哪些功能?看这一篇就够了!智语写作全功能详解
  • rufus.ini
  • Explorer++
  • Interpretability-Guided Test-Time Adversarial Defense
  • 2025 年 11 月开窗器厂家推荐排行榜,链条开窗器,机芯开窗器,配件开窗器,电动开窗器公司推荐
  • noip5
  • #题解#洛谷P3143
  • 20232326 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 2025 ICPC成都+南京游记
  • MySQL表的增删改查 - 教程