C++面向对象多级菜单向Arduino的移植问题小结

 更新时间:2024年06月24日 08:57:33   作者:苦涩的心  
这篇文章主要介绍了C++面向对象多级菜单向Arduino的移植问题及实现思路,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

前段时间写了一篇文章《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() {
    /*脚本生成菜单*/
    //测试用例1
    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("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

四、参考资料

五、源码下载

百度网盘下载:

链接: https://pan.baidu.com/s/1GLyryj046DJl3gbfoE1L-w?pwd=vspi

提取码: vspi

到此这篇关于C++面向对象多级菜单向Arduino的移植的文章就介绍到这了,更多相关C++面向对象多级菜单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用C语言的泛型实现交换两个变量值

    用C语言的泛型实现交换两个变量值

    在日常编程里面经常会遇到交换两个变量的内容的任务,对于泛型类型而言有两种泛型策略来实现,下面跟着小编一起来学习学习。
    2016-08-08
  • C++实现简单计算器功能

    C++实现简单计算器功能

    这篇文章主要为大家详细介绍了C++实现简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • 使用C++实现全排列算法的方法详解

    使用C++实现全排列算法的方法详解

    本篇文章是对使用C++实现全排列算法的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 深入C++ 函数映射的使用详解

    深入C++ 函数映射的使用详解

    我比较喜欢用代码结合实际来讲解,下面我将以一段事例代码来讲解如何使用这几种映射
    2013-07-07
  • C语言使用openSSL库DES模块实现加密功能详解

    C语言使用openSSL库DES模块实现加密功能详解

    这篇文章主要介绍了C语言使用openSSL库DES模块实现加密功能,简单讲解了DES加密的相关概念,并结合实例形式分析了DES加密的具体实现技巧,需要的朋友可以参考下
    2017-05-05
  • 详解C++成员函数的override和final说明符的用法

    详解C++成员函数的override和final说明符的用法

    这篇文章主要介绍了详解C++成员函数的override和final说明符的用法,分别用于重写和禁止继承类,要的朋友可以参考下
    2016-01-01
  • C++中char*转换为LPCWSTR的解决方案

    C++中char*转换为LPCWSTR的解决方案

    最近在学习C++,遇到了一个char*转换为LPCWSTR的问题,通过查找资料终于解决了,所以下面这篇文章主要介绍了C++中char*转LPCWSTR的解决方案,文中通过详细的示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • QT实现多文件拖拽获取路径的方法

    QT实现多文件拖拽获取路径的方法

    这篇文章主要为大家详细介绍了QT实现多文件拖拽获取路径的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++俄罗斯方块游戏 无需图形库的俄罗斯方块

    C++俄罗斯方块游戏 无需图形库的俄罗斯方块

    这篇文章主要为大家详细介绍了无需图形库的C++俄罗斯方块游戏,重温经典游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • C语言标准库<math.h>和<setjmp.h>的实现

    C语言标准库<math.h>和<setjmp.h>的实现

    本文主要介绍了C语言标准库<math.h>和<setjmp.h>的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11

最新评论