【问题标题】:C++ Creating a Menu and passing ArgsC++ 创建菜单并传递参数
【发布时间】:2021-06-07 20:47:40
【问题描述】:

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

【问题讨论】:

  • 考虑使用struct 来保存单个菜单的所有数据。然后只使用该结构的一个数组。
  • 如果你创建struct和创建std::vector<myMenu>,你可以使用myMenu.emplace_back创建项目而不需要单独的函数。
  • 老实说,这是我不熟悉的东西。我想我得用谷歌搜索一下。
  • 将每个菜单设为数据类型,你可以使用结构或类。

标签: c++ parameters void args


【解决方案1】:

试试这样的:

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);

【讨论】:

  • 我实际上遇到了一个问题,这是我没有考虑的错。我习惯了 C。我不知道如何显示这个。与此同时,我试图在控制台中显示,但我不知道该怎么做。
  • @T.Shepherd 我的第一个示例与 C 兼容,我的第二个示例仅适用于 C++。
  • 我看到我的意思是第二个版本但是我没有定义它真的很抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2011-04-22
  • 1970-01-01
  • 2012-10-19
  • 2022-07-22
  • 2016-12-10
  • 2020-08-21
相关资源
最近更新 更多