J'utilise boost :: Program_Options Bibliothèque pour traiter les paramètres de la ligne de commande. J'ai besoin d'accepter un nom de fichier via -r, au cas où il est vide (-R donné sans paramètres), je dois utiliser STDIN.
desc.add_options() ("replay,r", boost::program_options::value<std::string>(), "bla bla bla")
3 Réponses :
Je ne pense pas que les bibliothèques d'analyse de ligne de commande vous permettent d'avoir des options pouvant prendre une argumentation ou non. Si une option nécessite un argument, vous devez en donner un. Dans ce cas, la pratique standard (In * Nix de toute façon) est d'utiliser '-' en tant que nom de fichier pour indiquer que vous souhaitez lire à partir d'une entrée standard. p>
Boost :: Program_Options Est-ce que i> permet à cette via zero_tokens ().
Vous pouvez essayer une astuce avec le comptez alors le nombre d'éléments dans le < Code> Replay code> Vecteur. Vous voudrez lancer une erreur si plusieurs arguments sont transmis à l'option Replay em>. P> p> multitugit code> et
zero_tokens code> Options:
Veuillez utiliser la méthode implicit_value code>, par exemple
desc.add_options()
("replay,r", po::value<std::string>()->implicit_value("stdin"), "bla bla bla")
@Vladimir Prus, voici une autre question sur les options sans valeur ici Stackoverflow.com/Questtions/7174781/... Je veux pouvoir ajouter des notificateurs pour de telles options ni écrire un patch pour l'activer. S'il vous plaît, commentaire, merci.
Malheureusement, cela ne fonctionne pas lorsqu'une valeur vide est donnée dans le fichier INI, pour une raison quelconque.