Frage

Hier ist eine gestreifte abgespeckte Version eines der Beispiele in boost :: program_options:

#include <boost/program_options.hpp>
namespace po = boost::program_options;

#include <iostream>
#include <iterator>
using namespace std;

int main( int argc, char *argv[ ] )
{
    try {
        int opt;
        po::options_description desc("Allowed options");
        desc.add_options()
            ( "help", "produce help message" )
            ( "optimization", po::value< int >(&opt)->default_value(10), "optimization level" )
            ( "verbose", po::value< int >()->implicit_value( 1 ), "enable verbosity (optionally specify level)"  )
        ;

        po::variables_map vm;
        po::store( po::command_line_parser( argc, argv ).options( desc ).run(), vm );
        po::notify( vm );


        if ( vm.count( "help" ) )
        {
            cout << "Usage: options_description [options]\n";
            cout << desc;
            return 0;
        }

        if ( vm.count( "verbose" ) )
        {
            cout << "Verbosity enabled.  Level is " << vm[ "verbose" ].as< int >() << "\n";
        }
    }
    catch( std::exception& e )
    {
        cout << e.what() << "\n";
        return 1;
    }    
    return 0;
}

Wenn ich dies mit einem --help betreibe ich diese Ausgabe erhalten:

Usage: options_description [options]
Allowed options:
  --help                   produce help message
  --optimization arg (=10) optimization level
  --verbose [=arg(=1)]     enable verbosity (optionally specify level)

Gibt es eine Möglichkeit der = in der Spalte Optionen, um loszuwerden, oder möglicherweise fallen nur die Anzeige der Standard und impliziten args?

War es hilfreich?

Lösung

Sie können die Technik des versteckte Optionen zum Drucken der Hilfe einer Reihe von Optionen für das Parsen und einen weiteren Satz liefern. Dies erfordert, dass Sie zwei Kopien der Optionsliste zu erhalten, though.

Zum Beispiel mit dem aktuellen desc Definition beginnen und dann darunter einen weiteren hinzu:

po::options_description display_options("Allowed options");
display_options.add_options()
    ("help", "produce help message")
    ("optimization", po::value<int>(), "optimization level")
    ("verbose", "enable verbosity (optionally specify level)")
    ;

Weiter desc verwenden, um die Befehlszeilenoptionen Parsen:

po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(desc).run(), vm);
po::notify(vm);

Aber verwenden Sie die neue Option Beschreibung für die Ansicht der Dokumentation:

if (vm.count("help"))
{
    cout << "Usage: options_description [options]\n";
    cout << display_options; // not desc
    return 0;
}

sollte die zeigen, dass optimization ein Argument hat, aber es wird nicht verraten, was der Standardwert ist, und es wird nicht anerkennen, dass verbose jedes Argument überhaupt akzeptiert.

Andere Tipps

Wenn es nicht eingebaut in ist, Sie options_description anpassen konnten und Ihre eigenen operator<< implementieren, basierend auf, was in den Boost-Header.

Sie könnten in der Lage sein, dies zu tun, um die print Methode.

operator<< nur Anrufe durch print, so dass Sie auf Ihrem eigenen AFAI sind sehen.

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