簡體   English   中英

使用boost.program_options解析命令行參數-C ++

[英]parsing command-line arguments with boost.program_options - C++

我正在嘗試使用boost分析命令行參數。 這是我的代碼(我只包括需要幫助的部分):

#include <iostream>
#include <iterator>
#include <boost/program_options.hpp>

using std::cerr;
using std::cout;
using std::endl;
namespace po = boost::program_options;

try {

    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        ("compression", po::value<double>(), "set compression level");

    po::variables_map vm;
    po::store(po::parse_command_line(ac, av, desc), vm);
    po::notify(vm);

    if (vm.count("help")) {
        cout << desc << "\n";
        return 0;
      }

    if (vm.count("compression")) {
        cout << "Compression level was set to "
             << vm["compression"].as<double>() << ".\n";
      } else {
            cout << "Compression level was not set.\n";
            }
      }
    catch(exception& e) {
        cerr << "error: " << e.what() << "\n";
        return 1;
    }
    catch(...) {
        cerr << "Exception of unknown type!\n";
    }

我的主要功能設置為:

main(int argc, char const *argv[])

但是,我遵循的代碼https://github.com/boostorg/program_options/blob/develop/example/first.cpp包含以下參數:

int main(int ac, char* av[])

當我編譯它時,它會吐出來,我完全迷失了:

終點回程

您還忘記了包含異常-這是您的代碼正在運行..

#include <iostream>
#include <iterator>
#include <boost/program_options.hpp>
#include <exception>

using std::cerr;
using std::cout;
using std::endl;
using std::exception;
namespace po = boost::program_options;

int main(int ac, char** av){

try {

    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        ("compression", po::value<double>(), "set compression level");

    po::variables_map vm;
    po::store(po::parse_command_line(ac, av, desc), vm);
    po::notify(vm);

    if (vm.count("help")) {
        cout << desc << "\n";
        return 0;
      }

    if (vm.count("compression")) {
        cout << "Compression level was set to "
             << vm["compression"].as<double>() << ".\n";
      } else {
            cout << "Compression level was not set.\n";
            }
      }
    catch(exception& e) {
        cerr << "error: " << e.what() << "\n";
        return 1;
    }
    catch(...) {
        cerr << "Exception of unknown type!\n";
    return 1;
    }
return 0;
}

用編譯

g++ -std=c++11 cmd.cpp -l boost_program_options

而且你應該沒事

實際上,如果需要,您可以省略“ std = c ++ 11”。 我都嘗試過了,還可以

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM