wie bekomme ich die Nicht-Flagge und nicht-Option Token nach boost :: program_options meine Befehlszeile args parst

StackOverflow https://stackoverflow.com/questions/1314717

Frage

In Python kann ich mein optparse Beispiel so konstruieren, dass sie automatisch filtern aus den Optionen und nicht-Option / Fahnen in zwei verschiedene Eimer:

(options, args) = parser.parse_args()

Mit boost :: program_options, wie kann ich eine Liste von Token abzurufen, die die verbleibenden nicht-Option und nicht-Flag-Token sind?

z. Wenn mein Programm hat Flags

--foo 
--bar BAR

und ich dann in der Befehlszeile übergeben:

--foo hey --bar BAR you

Wie kann ich eine Liste bekommen besteht ausschließlich aus Token „hey“ und „Sie“

War es hilfreich?

Lösung

IIRC, müssen Sie eine Kombination aus verwenden versteckte Optionen . Die Idee ist, (1) eine normale Option hinzufügen und ihm einen Namen geben, vielleicht so etwas wie --positional=ARG, (2) umfasst nicht die entsprechende Option in der Hilfe Beschreibung, (3) konfigurieren command_line_parser alle Positionsargumente zu behandeln, als ob --positional war angegeben, und (4) die Positions Argumenten vm["positional"].as< std::vector<std::string> >() abzurufen.

Es gibt wohl ein Beispiel irgendwo im Quellbaum, aber ich habe es jetzt nicht auf dieser Maschine.

Andere Tipps

Hier ist ein Beispiel:

namespace po = boost::program_options;    
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;

m_cmdLine.add_options()
    (/*stuff*/)
    ("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
                        .options(m_cmdLine)
                        .positional(m_positional)
                        .allow_unregistered()
                        .run();
// store, notify, etc

Dann bekommt nur „Input“ genannt Optionen als Vektor von Strings und Sie sind alle gesetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top