在Arduino项目中通过指针从指定类调用非静态方法
我正在开发一个Arduino项目,需要使用LCD屏幕和动态变化的菜单数量。在VS2019中使用Arduino扩展,我创建了一个菜单类,其中包含一个结构列表(MenuItem),该结构有两个变量:菜单项名称(menuFunctionName)和一个指向函数调用的指针(UI::*menuFunctionCall)(int x),当选择该菜单项时,该函数调用将一个int作为参数。我需要在一个名为UI的类中创建方法,然后该类将附加到此列表,从而形成一个菜单 菜单类的一部分:在Arduino项目中通过指针从指定类调用非静态方法,arduino,arduino-c++,Arduino,Arduino C++,我正在开发一个Arduino项目,需要使用LCD屏幕和动态变化的菜单数量。在VS2019中使用Arduino扩展,我创建了一个菜单类,其中包含一个结构列表(MenuItem),该结构有两个变量:菜单项名称(menuFunctionName)和一个指向函数调用的指针(UI::*menuFunctionCall)(int x),当选择该菜单项时,该函数调用将一个int作为参数。我需要在一个名为UI的类中创建方法,然后该类将附加到此列表,从而形成一个菜单 菜单类的一部分: class UI; cl
class UI;
class Menu
{
public:
struct MenuItem
{
void (UI::*menuFunctionCall)(int x);
char menuFunctionName[30];
};
virtual void addMenuItem(void (UI::*menuFunction)(int x),const char* menuName);
protected:
MenuItem* p_menuItems; //addMenuItem populates this
};
在UI类中,我有一个从Menu(m_main Menu)派生的成员,它通过addMenuItem添加项。到目前为止,我可以成功地将项添加到列表中,该列表包括对UI内部方法的调用和一些名称
...//How MaineMenu gets made
class MainMenu final: public Menu
{};
...
//how UI gets made
#include "MainMenu.h"
class UI
{
private:
MainMenu m_mainMenu;
void mainBtnPress(int x);
};
...//Inside it's constructor
UI::UI()
{
m_mainMenu = MainMenu(p_joy, p_display);
m_mainMenu.addMenuItem(&UI::mainBtnPress, "x"); //This works OK
}
我面临的问题是调用一个存储的指针指向一个方法。现在我在p_菜单项中有一个列表,我正试图从主菜单调用它。因此,menuFunctionCall是列表中存储在位置[0]的指针,XXX是要传递给它的某个int值
MainMenu::DoSomething()
{
(&UI::*p_menuItems[0].menuFunctionCall, XXX);
}
编译时,我收到“在“*”标记之前预期的非限定id”。由于这是一个Arduino项目,我必须使用的内存有限,因此std::function或其他类似库太大,无法使用。我确信这只是一个语法错误