W jaki sposób wywołać funkcję poprzez wpisanie jakiegoś hasła do konsoli?

0

Witam. Mam zamiar stworzyć grę tekstową i chciałbym się zapytać w jaki sposób mógłbym wywołać funkcję, która pokaże np. ekwipunek w dowolnym momencie po wpisaniu jakiegoś konkretnego wyrazu.

1
using CommandArguments = std::vector<ostream&>;
using Command = std::function<void(const CommandArguments&)>;
using CommandsMap = std::map<std::string, Command>;

… … …
CommandsMap commands {
    {
        "equipment_list", 
        [equipment](ostream &) { equipment->List(cout); } 
    },
    {
        "take",
        [localItems, equipment](ostream &paramStream)
        {
            auto item = localItems->MatchItem(paramStream);
            if (item)
            {
                equipment->PickUp(item);
            } else {
                cerr << "cant find item";
            }
        }
    }
};

string line;
while (getline(cin, line))
{
    istringstream commandData(line);
    string commandName;
    commandData >> commandName;

    auto iter = commands.find(commandName);
    if (iter != std::end(commands))
    {
         iter->second(commandData);
    } else {
        cerr << "Unknown command: " << commandName << std::endl;
    }
}

Da się to zrobić lepiej, ale jest to bardziej skomplikowane.

0

Najbardziej chodzi mi oto jak mogę stworzyć "komendę", po której pokazane zostaną zależnie od komendy statystyki, stan zdrowia itp. a w przeciwnym przypadku pokaże się napis "Komenda nie znana."

0

Kolega napisał, a nie pofatygowałeś się żeby sprawdzić co jest czym w doc. c++.
std::function
Masz przykład jak robić bindy do funkcji itd. A std::map chyba znasz.

0

Poczytaj też o wzorcu Command. To jest to, co Ci się przyda.
A konkretnie - połączenie tego wzorca z unordered_map

1 użytkowników online, w tym zalogowanych: 0, gości: 1