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://download.csdn.net/download/hele_two/89472615

相关推荐
cany100012 小时前
C++ -- 可变参数模板
c++
不会C语言的男孩13 小时前
C++ Primer 第2章:变量和基本类型
开发语言·c++
云泽80814 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
Tri_Function15 小时前
简单图论大学习
c++
lqqjuly15 小时前
C++ 完整知识体系—从基础语法到现代 C++23 的系统性总结
c++·c++23
王老师青少年编程16 小时前
信奥赛C++提高组csp-s之FHQ Treap
c++·csp·平衡树·信奥赛·csp-s·提高组·fhq treap
QiLinkOS18 小时前
《打破“用爱发电”:一种基于 Gitee 与时间戳的开源权益分配机制探索》
c语言·数据结构·c++·科技·算法·gitee·开源
Irissgwe18 小时前
c++STL--string类
c++·stl·string
Irissgwe18 小时前
c++类型转换
c++·类型转换·explicit·static_cast·const_cast·dynamic_cast·rtti
智者知已应修善业18 小时前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机