Hallo,
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.
Naja, C-basiert gibt's noch POPT als Library, das funktioniert anscheinend auch unter Windows (das aber nie getestet), allerdings glaube ich nicht, dass Du hier jemanden finden wirst, der Dir hilft, Deine eigene Lib zu schreiben, nur, weil Du keine Lust hast, etwas vorgefertigtes zu nehmen. Es gibt da einfach zu viele Möglichkeiten, vorhandenen Code zu nutzen, als dass sich die wenigen Leute hier im Forum, die sich mit C auskennen, jemals Gedanken gemacht hätten, sowas selbst zu bauen.
Naja, ansonsten zum Thema Datenstrukturdesign, da Du offensichtlich C++ verwendest, würde ich in etwa folgendes machen (schnell zusammengehackt, kann man sicher besser machen):
struct option {
char short; // 0, wenn keine kurze option verfügbar
string long; // leer, wenn keine lange option verfügbar
int takesarg; // ob man zu dieser option ein argument mitgeben muss
int optional; // ob die option angegeben werden muss
};
struct parsed_option {
char short; // kopiert aus der jew. struct option
string long; // kopiert aus der jew. struct option
int hadarg; // ob die option ein argument hatte
string arg; // der inhalt des arguments
};
class OptionParser {
// Wie private/protected aussieht sei Dir überlassen
public:
// Konstruktor: Initialisiere den Option-Parser
// (kannst gerne auch was anderes als vector nehmen)
OptionParser (vector<option> options);
// Parse Argumente, gibt an ob alles korrekt war
bool parse (int argc, char **argv);
// Gib die angegebenen optionen zurück
vector <parsed_option> getOptions ();
// Gib die verbleibenden Argumente zurück
vector <string> getArguments ();
}
Kann man wie gesagt sicher noch stark verbessern oder beliebig verkomplizieren. Ich verstehe aber nicht, warum Du Dich nicht auf bereits geschriebenen, gut getesteten Code verlassen willst und stattdessen so etwas nachprogrammieren willst...
Viele Grüße,
Christian