C++面向对象多级菜单向Arduino的移植

news/2024/9/23 9:34:12

前段时间写了一篇文章《C++面向对象语言自制多级菜单》,文中指出了可以将HeleMenu库进行移植,现已完成技术思路,特此记录。

一、特性

基本与上一篇文章指出的一致,只是将菜单显示和响应函数合二为一

二、代码实现

基本与上一篇文章指出的一致,只是考虑到右值和左值的问题,将形参改为了const类型

三、使用示例

(一)手动生成

void setup() {/*手动生成菜单,测试用例3*/HeleMenu *m1 = new HeleMenu("Root");m1->attachAction(display_root);HeleMenuViewer::init(m1); //初始化根菜单HeleMenu *m2 = new HeleMenu("Log",m1);m2->attachAction(display_log);m2->addToMenus();m2 = new HeleMenu("Opt",m1);m2->addValues({"save","unsave"});m2->attachAction(display_opt);m2->addToMenus();m2 = new HeleMenu("Menu",m1);m2->attachAction(display_menu);m2->addToMenus();m1 = m2; //构建下一层子菜单m1->addValues({"1.Adjust", "2.About"});HeleMenuViewer::gotoRoot();	 //到达根菜单
}void loop() {//显示与响应 lcd.clear();HeleMenuViewer::action();_delay_ms(50);
}

(二)脚本生成

void setup() {/*脚本生成菜单*///测试用例1void (*p_display[])(const string&, const vector<string>&, uint8_t&) = {/*root*/display_root, /*log*/display_log, /*operate*/display_opt, /*menu*/display_menu};HeleMenu *m1 = HeleMenu::parseMenu("Root{Log{},Opt{save,unsave},Menu{0.Contrast,2.About}}",	p_display);HeleMenuViewer::init(m1);//测试用例2// void (*p_display[])(const string&, const vector<string>&, uint8_t&) = {/*root*/display_root, /*log*/display_log, /*operate*/display_opt, /*menu*/display_menu};// HeleMenu *m1 = HeleMenu::parseMenu("{Log{},Opt{save,unsave},Menu{0.Contrast,2.About}}",	p_display);// HeleMenuViewer::init(m1);HeleMenuViewer::gotoRoot();	 //到达根菜单
}void loop() {//显示与响应 lcd.clear();HeleMenuViewer::action();_delay_ms(50);
}

(三)演示

菜单结构如下:

 -Root-Log-XX-...-Opt-save-unsave-Menu-Contrast-About

四、参考资料

  • c++中string& , const string& 和 string&& 的区别是什么?
  • 简单剖析C++右值引用和左值引用
  • Reduce the size and memory usage of your sketch

五、源码下载

https://download.csdn.net/download/hele_two/89472615

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C++U7-10-最小生成树

本节课作业讲解视频: 链接:https://pan.baidu.com/s/1lLlmhShdat9HuJWx7Rp_tA?pwd=0000 提取码:0000最小生成树是一种在无向图中寻找特定结构的算法结果,它具有多种实际应用。以下是关于最小生成树的一些主要应用:网络布局问题:在一个连通加权无向图中,最小生成树算法可…

NSIS 入门教程 (三)

引言在教程的第二部分中,我们为安装程序增加了一个卸载程序,并查看了一些其他的向导页面以及安装部分的选择。第三部分的目标是使安装程序的外观更加现代化。更现代的外观为了给安装程序一个更现代的外观,我们要启用现代用户界面。要提升我们的安装程序(基于“secondinstal…

惠普塔式服务器数据恢复

惠普塔式服务器,5块1000GB的SAS硬盘组成raid5磁盘阵列服务器检测: 硬盘掉线服务器崩溃,其中一块硬盘掉线很久,现又有一块硬盘掉线。 故障分析: 服务器底层数据检测发现数据并没有明显的同步痕迹。将服务器内的硬盘按照顺序编号并贴好标签后取出服务器盘位,对物理硬盘进行…

泓优阁整理的一些轻创业的项目分享

对于当代年轻人来说,除了工作,很多人想去低成本创业,或改善自己的生活,或图谋未来的发展,那么以下一些轻创业项目分享给大家。1,品牌代购 随着经济水平的提高和互联网的普及,代购行业也逐渐成为新的创业热点,它为人们提供了方便的购物服务,也能实现工作之余客观的收入…

IBM服务器数据恢复

服务器数据恢复背景: 一台X3850服务器,这台服务器在运行过程中突然崩溃,服务器崩溃前从未进行过维护,不清楚硬件状况,服务器操作系统为linux,运行oracle数据库。 经检测,初步判定该服务器上共有5块硬盘,其中4块硬盘组成riad5磁盘阵列,1块硬盘位热备盘,其中raid5磁盘阵…

服务器硬盘磁头损坏,盘片划伤数据恢复

服务器硬盘故障: Dell服务器,raid阵列上有一块硬盘出现故障,经过检测发现硬盘问题,后续在无尘台开盘处理,发现盘片损伤严重;初步判断也存在硬件故障。服务器硬盘数据恢复过程: 1、发现开盘的盘面有规则的同心圆状划痕,这是典型的磁头出现故障而划伤盘面的情况,这种情况…

Orleans初体验

Orleans:是一个跨平台框架,用于构建可靠且可缩放的分散式应用。 分布式应用定义为跨多个进程的应用,通常使用对等通信来超越硬件边界。 从单个本地服务器扩展到了云中数千个分布式、高度可用的应用。 将熟悉的概念和 C# 习语扩展到了多服务器环境。 在设计上可弹性缩放。 当…

9. Mybatis 小技巧

1. #{ } 和 $#{ } 和 ${ } 的区别 #{ }:先编译sql语句,再给占位符传值,底层是PreparedStatement实现。可以防止sql注入,比较常用。 ${}:先进行sql语句拼接,然后再编译sql语句,底层是Statement实现。存在sql注入现象。只有在需要进行sql语句关键字拼接的情况下才会用到。…