Nej, med den mak kode må jeg kunne gøre noget andet.
Problemet er at jeg modtager en string fra input, og gerne vil udføre en kommando afhængig af inputtet. Er jeg nød til at lave en if else, hele vejen?
Nej, brug du bare et map:
- #include <string>
- #include <map>
- #include <iostream>
-
- bool KeepRunning = true;
-
- class Command {
- public:
- virtual void execute() = 0;
- };
-
- class SayHello : public Command {
- public:
- virtual void execute() {
- std::cout << "Hello, World" << std::endl;
- }
- };
-
- class SayGoodbye : public Command {
- public:
- virtual void execute() {
- std::cout << "Goodbye, World" << std::endl;
- }
- };
-
- class Exit : public Command {
- public:
- virtual void execute() {
- KeepRunning = false;
- }
- };
-
- int main (int argc, char ** argv) {
- std::string command;
- std::map<std::string,Command *> commands;
- commands["hello"] = new SayHello;
- commands["goodbye"] = new SayGoodbye;
- commands["exit"] = new Exit;
- do {
- std::cin >> command;
- if (commands[command] == NULL) {
- std::cerr << "Unknown command: \"" << command << "\"" << std::endl;
- } else {
- commands[command]->execute();
- }
- } while (KeepRunning);
- return 0;
- }
Eksekvering:
robert@robert-laptop:~$ make test
g++ test.cpp -o test
robert@robert-laptop:~$ ./test
hello
Hello, World
goodbye
Goodbye, World
blar
Unknown command: "blar"
exit
robert@robert-laptop:~$
Indlæg senest redigeret d. 24.11.2008 23:16 af Bruger #2695