C++ 创建菜单并传递参数

C++ Creating a Menu and passing Args

所以我基本上想调用一个 void 并存储我的菜单、菜单编号、文本和函数(void),我故意做错了,但我想不通。

void AddMenu(char* text, int Menu, void* func)
{
        nMenu[Menu] = Menu;
        sMenu[Menu] = text;
        fMenu[Menu]* func;
}

所以我的想法是

void AddMenu("Main Menu", 0, NULL);
void AddMenu("Option 1", 1, SomeVoid());
void AddMenu("Option 2", 2, NULL);
void AddMenu("Option 3", 3, NULL);
void AddMenu("Option 4", 4, NULL);

有更好的方法吗?

int nMenu[32];
char* sMenu[32];
DWORD* fMenu[32];

int curMenu;
bool InMenu;




void AddMenu(char* text, int Menu, void* func)
{
        nMenu[Menu] = Menu;
        sMenu[Menu] = text;
        fMenu[Menu]* func;
}

试试像这样的东西:

typedef void (*menuFunc)();

int nMenu[32];
const char* sMenu[32];
menuFunc fMenu[32];

void AddMenu(const char* text, int Menu, menuFunc func)
{
    nMenu[Menu] = Menu;
    sMenu[Menu] = text;
    fMenu[Menu] = func;
}
void SomeVoid()
{
    ...
}

void AddMenu("Main Menu", 0, NULL);
void AddMenu("Option 1", 1, SomeVoid);
void AddMenu("Option 2", 2, NULL);
void AddMenu("Option 3", 3, NULL);
void AddMenu("Option 4", 4, NULL);

话虽如此,请考虑更像这样的事情:

using menuFunc = std::function<void()>;

struct menuInfo
{
    int id;
    std::string text;
    menuFunc func;
};

std::vector<menuInfo> fMenu;

void AddMenu(std:string text, int id, menuFunc func)
{
    menuInfo mi;
    mi.id = id;
    mi.text = text;
    mi.func = func;
    fMenu.push_back(mi);
}
void SomeVoid()
{
    ...
}

void SomeVoid2()
{
    ...
}

void AddMenu("Main Menu", 0, nullptr);
void AddMenu("Option 1", 1, SomeVoid);
void AddMenu("Option 2", 2, [](){ SomeVoid2(); });
void AddMenu("Option 3", 3, nullptr);
void AddMenu("Option 4", 4, nullptr);