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);
所以我基本上想调用一个 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);