2017-08-22 11 views
1

boost::program_optionsが使用されているコードは次のとおりです。ブースト::位置オプションは、すべての引数の位置を決めることができません

#include <iostream> 
#include <vector> 

#include <boost/program_options.hpp> 

int main (int argc, char* argv[]) { 
    int n; 
    std::string mps_name; 

    boost::program_options::options_description desc("options"); 
    desc.add_options() 
     ("file", boost::program_options::value<std::string>(&mps_name)->required(), 
     "input file") 
     (",n", boost::program_options::value<int>(&n)->required(), 
     "number") 
     ("help", "this help message") 
     ; 

    boost::program_options::positional_options_description p; 
    p.add("file", 1); 
    p.add(",n", 1); 

    boost::program_options::variables_map vm; 

    try { 
     boost::program_options::store(boost::program_options::command_line_parser(argc, argv). 
             options(desc).positional(p).run(), vm); 

     if (vm.count("help") || argc == 1) { 
      std::cout << "usage: " << argv[0] << " [options]" << std::endl; 
      std::cout << desc; 
      return -1; 
     } 

     boost::program_options::notify(vm); 
    } 
    catch (std::exception& e) { 
     std::cout << e.what() << std::endl; 
     return -1; 
    } 

    std::cout << "command line arguments parsed" << std::endl; 

    return 0; 
} // main 

すべての引数を位置引数として使用してコードを実行すると、 boostは例外unrecognised option '5'をスローします。コードは./a.out earth 5

コードを実行されたときにコマンドを./a.out --file earth -n 5

答えて

0

を実行したときに問題がpositionalsだけ長い名前でオプションの説明に対応することで完璧に動作します。

boost::program_options::options_description desc("options"); 
desc.add_options() 
    ("file", boost::program_options::value<std::string>(&mps_name)->required(), "input file") 
    ("n,n", boost::program_options::value<int>(&n)->required(), "number") 
    ("help", "this help message") 
    ; 

boost::program_options::positional_options_description p; 
p.add("file", 1); 
p.add("n", 1); 

Live On Coliru

プリント

./a.out ltuae 42 
command line arguments parsed: ltuae 42 
:ここで作業バージョンです
関連する問題