Search code examples
c++parametersvoidargs

C++ Creating a Menu and passing Args


So i want to basically call a void and store my menu, Menu Number, Text, and the function(void) im defiently doing this wrong however i can't figure it out.

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

So the idea would be

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

is there a better way of doing this?

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

Solution

  • Try something more like this:

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

    That being said, consider something more like this instead:

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