Hallo SelfForum.
Ich möchte eine Kommandozeile parsen (C++). Optionen können sowohl in Kurz- oder Langform (--help, -h) und mit oder ohne Argument(en) in "unbegrenzter" Anzahl und nicht definierter Reihenfolge vorkommen.
Welchen Ansatz haltet ihr hier für effizient und würdet ihr verfolgen? Ich würde mich über ein paar Anregungen und Vorschläge freuen.
Mein (unreifer?) Ansatz:
Ich nehme Structs zu Hilfe; etwa:
Struct 1: Hier stecke ich alle möglichen Optionen rein, zusammen mit Metainfos wie hat-Argument oder nicht und Typ-des-Argument. Z.B.:
struct options {
string option_long;
string option_short;
bool has_argument;
string type_of_argument;
};
struct options * cmdopts;
Struct 2: Hier lege ich alle Optionen und Argumente von der Kommandozeile zur späteren Abarbeitung ab, sofern sie valide waren. Z.B.:
struct cmdline {
string option;
bool has_argument;
string argument; /* oder vector<string>; je nach Bedarf */
};
struct cmdline * cmdargs;
getopt und getopt_long, da unixspezifisch, möchte ich nach Möglichkeit nicht verwenden (Oder existiert hier ein vergleichbares Pendant in der WinWelt?) bzw. mir ist es wichtig, den Parser selbst zu implementieren.
Anmerkung: Mir ist es bewusst, dass es einen Haufen an Libraries gibt, etwa boost::program_options oder anyoption. Auch wenn Boost quasi-Standard ist, wäre das in meinem Fall eher Overkill.
Dank und beste Grüße.