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.
0
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 ¶mStream)
{
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