2012-08-10 11 views
10

? Quiero dar un valor predeterminado para el parámetro posicional como en el comentario en el código, pero el compilador se queja. El código tal como está compila bien. Yo uso impulso 1.46.1 y g ++¿Cómo especifico un valor predeterminado para el vector <string> en 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

[¿Esto ayuda?] (Http://stackoverflow.com/a/3152802/220636) – nabulke

+0

esta línea compila:
("camino, p", po :: valor >() -> default_value (std :: vector (), ""), "archivos de entrada.")
pero no sé por qué – Michael

+0

@nabulke sí ayuda – Michael

Respuesta

11

que necesito para dar una representación textual del valor predeterminado, consulte http://lists.boost.org/boost-users/2010/01/55054.php.

I.e. la siguiente línea funciona:

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

supongo que esto es necesario para la salida de ayuda, lo que pude en mi ejemplo

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

Dado que el compilador no sabe cómo sobrecargar el operator<<() para vector<string>, se se queja

Cuestiones relacionadas