2012-08-10 8 views
10

Chcę podać wartość domyślną dla parametru pozycyjnego, tak jak w komentarzu w kodzie, ale kompilator narzeka. Kod, ponieważ jest kompilowany dobrze. Używam impuls 1.46.1 i g ++Jak określić wartość domyślną dla wektora <string> w 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

[Czy to pomoże?] (Http://stackoverflow.com/a/3152802/220636) – nabulke

+0

linia ta kompiluje:
("ścieżka, p", PO :: wartość >() -> default_value (std :: vector (), ""), "pliki wejściowe.")
ale nie wiem dlaczego – Michael

+0

@nabulke tak to pomaga – Michael

Odpowiedz

11

muszę dać tekstową reprezentację wartości domyślnej, zobacz http://lists.boost.org/boost-users/2010/01/55054.php.

tj. następujący wiersz działa:

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

myślę, że to jest potrzebne do wyjścia pomocy, który mógłby w moim przykładzie

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

Ponieważ kompilator nie wie, w jaki sposób przeciążać operator<<() dla vector<string>, to narzeka.

Powiązane problemy