12
votes

Comment accepter la valeur vide dans Boost :: Program_Options

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")


0 commentaires

3 Réponses :


1
votes

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.


1 commentaires

Boost :: Program_Options Est-ce que permet à cette via zero_tokens ().



7
votes

Vous pouvez essayer une astuce avec le multitugit et zero_tokens Options: xxx

comptez alors le nombre d'éléments dans le < Code> Replay Vecteur. Vous voudrez lancer une erreur si plusieurs arguments sont transmis à l'option Replay .


0 commentaires

27
votes

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")


2 commentaires

@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.