【问题标题】:Boost::Positional Options unable to make all arguments positionalBoost::Positional 选项无法使所有参数定位
【发布时间】:2017-08-22 18:54:55
【问题描述】:

以下是使用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 执行时,代码完美运行

【问题讨论】:

    标签: c++ boost boost-program-options


    【解决方案1】:

    问题是位置仅对应于长名称的选项描述。这是一个工作版本:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多