È possibile ottenere questo effetto dando il value
sia uno default_value
e uno implicit_value
.
Il default_value
verrà utilizzato quando l'opzione non è stata specificata. Il implicit_value
verrà utilizzato quando l'opzione è specifica senza un valore. Se un valore è specificato, sostituirà il valore predefinito e implicito.
Così, un po 'di codice per fare questo potrebbe essere simile a questa:
#include "boost/program_options.hpp"
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
("process-jpeg,e", po::value<string>()->default_value("")->implicit_value("./"), "Processes a JPEG.");
po::variables_map vm;
try
{
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
} catch (po::error& e) {
cerr << "ERROR: " << e.what() << endl << endl << desc << endl;
return 1;
}
string outputDir = vm["process-jpeg"].as<string>();
if (outputDir.empty()) {
cout << "-e was not provided on the command line" << endl;
} else {
cout << "-e is using directory: " << outputDir << endl;
}
}
Esecuzione di questo esempio stampe di codice:
$ ./jpg_processor
-e was not provided on the command line
$ ./jpg_processor -e
-e is using directory: ./
$ ./jpg_processor -e c:\tmp
-e is using directory: c:\tmp
fonte
2015-08-10 15:42:02
Nizza e succinta. Ho imparato una cosa :) – sehe
L'ultima [Boost-1.59] (http://www.boost.org/users/history/version_1_59_0.html) modifica questo comportamento. Se definisci 'implicit_value' e' default_value', non puoi impostare il valore e.g '--argument 3'. Se si aggiunge '--argument', viene utilizzato il valore implicito. In caso contrario, viene utilizzato il valore predefinito. Inoltre: se è definito solo "valore implicito" e l'argomento non esiste, il valore dell'argomento non è definito. –
Mentre la documentazione diceva così per anni, e il codice era "semplicemente" corretto per far corrispondere la documentazione, sarei aperto agli argomenti per cambiare sia documenti che codice nelle altre direzioni. Aprire un problema su Github sarebbe l'approccio migliore se lo si desidera. –