目录
- 一、特性
- 二、代码实现
- 三、使用示例
- (一)手动生成
- (二)脚本生成
- (三)演示
- 四、参考资料
- 五、源码下载
前段时间写了一篇文章《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(); Hele编程客栈MenuViewer::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, /javascript*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}}javascript", p_display); // HeleMenuViewer::init(m1); HeleMenuViewer::gotoRoot(); //到达根菜单 } void loop() { //显示与响应 lcd.clear(); HeleMenuViewer::actiojavascriptn(); _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://pan.baidu.com/s/1GLyryj046DJl3gbfoE1L-w?pwd=vspi
提取码: vspi
到此这篇关于C++面向对象多级菜单向Arduino的移植的文章就介绍到这了,更多相关C++面www.devze.com向对象多级菜单内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论