Les suggestions pour boost::program_options
et GNU getopt en sont de bons exemples.
Cependant, pour les options simples de la ligne de commande, j'ai tendance à utiliser std::find
Par exemple, pour lire le nom d'un fichier après un -f
argument de ligne de commande. Vous pouvez aussi simplement détecter si une option d'un seul mot a été passée comme -h
pour de l'aide.
#include <algorithm>
char* getCmdOption(char ** begin, char ** end, const std::string & option)
{
char ** itr = std::find(begin, end, option);
if (itr != end && ++itr != end)
{
return *itr;
}
return 0;
}
bool cmdOptionExists(char** begin, char** end, const std::string& option)
{
return std::find(begin, end, option) != end;
}
int main(int argc, char * argv[])
{
if(cmdOptionExists(argv, argv+argc, "-h"))
{
// Do stuff
}
char * filename = getCmdOption(argv, argv + argc, "-f");
if (filename)
{
// Do interesting things
// ...
}
return 0;
}
Une chose à laquelle il faut faire attention avec cette approche : vous devez utiliser std::strings comme valeur pour std::find, sinon la vérification de l'égalité est effectuée sur les valeurs des pointeurs.