2012-08-10 1 views
10

Desidero fornire un valore predefinito per il parametro posizionale come nel commento nel codice, ma il compilatore si lamenta. Il codice così com'è si compila bene. Io uso spinta 1.46.1 e g ++Come specificare un valore predefinito per il vettore <string> in boost :: program_options

int main(int argc, char *argv[]) { 
    namespace po = boost::program_options; 

    po::positional_options_description p; 
    p.add("path", -1); 

    po::options_description desc("Options"); 
    std::vector<std::string> vec_str; 
    std::string str; 
    desc.add_options() 
     ("foo,f", po::value<std::string>()->default_value(str), "bar") 
     //("path,p", po::value< std::vector<std::string> >()->default_value(vec_str), "input files.") 
     ("path,p", po::value< std::vector<std::string> >(), "input files.") 
    ; 

    po::variables_map vm; 
    po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm); 
    po::notify(vm); 
} 
+1

[Questo aiuto?] (Http://stackoverflow.com/a/3152802/220636) – nabulke

+0

questa riga compila:
("percorso, p", po :: valore >() -> default_value (std :: vector (), ""), "file di input".)
ma non so perché – Michael

+0

@nabulke si aiuta – Michael

risposta

11

ho bisogno di dare una rappresentazione testuale del valore di default, vedere http://lists.boost.org/boost-users/2010/01/55054.php.

I.e. la seguente riga funziona:

("path,p", po::value< std::vector<std::string> >()->default_value(std::vector<std::string>(), ""), "input files.") 

Credo che questo è necessario per l'uscita di aiuto, che potrebbe nel mio esempio

std::cout << desc << std::endl; 

Dal momento che il compilatore non sa come sovraccaricare il operator<<() per vector<string>, esso si lamenta.