Skal du understøtte argumenter til kommandoerne ?
Måske noget i stil med:
class Command {
public:
virtual void execute(vector<string> arguments) = 0;
virtual string getDescription() = 0;
};
class CopyCommand : public Command {
public:
virtual void execute(vector<string> arguments) {
if (arguments.size() == 2) {
copy(arguments[0], arguments[1]);
}
}
virtual string getDescription() {
return "copy <infile> <outfile>";
}
private:
void copy(string infile, string outfile) {
//....
}
};
Så kan du have et map som mapper strenge til Command objekter, og så slå første "ord" i kommando linjen op i denne liste:
# copy file.txt copy_of_file.txt
Jeg har brugt noget i den stil et par gange før, og det fungerer ret godt.