수색…


기본 사용법

Boost 프로그램 옵션은 명령 행 인수를 구문 분석하고 처리하는 간단하고 안전한 방법을 제공합니다.

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

int main(int argc, char** argv) {
  namespace po = boost::program_options;

  po::variables_map vm;
  po::options_description desc("Allowed Options");

  // declare arguments
  desc.add_options()
    ("name", po::value<std::string>()->required(), "Type your name to be greeted!");

  // parse arguments and save them in the variable map (vm)
  po::store(po::parse_command_line(argc, argv, desc), vm);

  std::cout << "Hello " << vm["name"].as<std::string>() << std::endl;

  return 0;
}

컴파일 및 실행 :

 $ g++ main.cpp -lboost_program_options && ./a.out --name Batman
Hello Batman

boost::program_options::options_description 객체를 출력하여 예상되는 인수 형식을 인쇄 할 수 있습니다.

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

생산할 것이다 :

Allowed Options:
  --name arg                Type your name to be greeted!

오류 처리

boost::program_options::notify 는 매개 변수 전달시 오류를보고하는 데 사용할 수 있습니다.

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

int main(int argc, char** argv) {
  namespace po = boost::program_options;

  po::variables_map vm;
  po::options_description desc("Allowed Options");

  // declare options
  desc.add_options()
    ("name", po::value<std::string>()->required(), "Type your name to be greeted!");

  // parse arguments
  po::store(po::parse_command_line(argc, argv, desc), vm);

  // check arguments
  try {
    po::notify(vm);
  } catch (std::exception& e) {
    std::cout << "Error: " << e.what() << std::endl;
    std::cout << desc << std::endl;
    return 1;
  }

  // program logic
  std::cout << "Hello " << vm["name"].as<std::string>() << std::endl;

  return 0;
}

잘못된 인수를 전달하면 유용한 오류 메시지가 나타납니다.

 $ ./a.out
Error: the option '--name' is required but missing
Allowed Options:
  --name arg            Type your name to be greeted!

기본값

기본 값 명령 줄 인수는 쉽게 지정할 수 있습니다.

// declare options
desc.add_options()
  ("name", po::value<std::string>()->required(), "Type your name to be greeted!")
  ("rank", po::value<std::string>()->default_value("Dark Knight"), "Your rank");

그 값은 변수 맵에도 추가됩니다.

  std::cout << "Hello " << vm["name"].as<std::string>() << " " << vm["rank"].as<std::string>() << std::endl;

설명에 기본값이 표시됩니다.

$ ./a.out
Error: the option '--name' is required but missing
Allowed Options:
  --name arg                Type your name to be greeted!
  --rank arg (=Dark Knight) Your rank

... 지정되지 않은 경우 사용됩니다 ...

$ ./a.out --name Batman
Hello Batman Dark Knight

...하지만 명령 줄에서 덮어 쓸 수 있습니다.

 $ ./a.out --name Batman --rank FlyingSquirrel
Hello Batman FlyingSquirrel

스위치

스위치는 값을 취하지 않는 명령 행 인수입니다. 다음과 같이 지정할 수 있습니다.

desc.add_options()
  ("hidden", po::bool_switch()->default_value(false), "Hide your name");

그리고 함께 사용 :

if (vm["hidden"].as<bool>())
   std::cout << "Hello *****" << std::endl;

커맨드 라인에서 :

 $ ./a.out --name Batman --hidden
Hello *****

설명에서 다음과 같이 표시됩니다.

Allowed Options:
  --name arg                Type your name to be greeted!
  --rank arg (=Dark Knight) Your rank
  --hidden                  Hide your name


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow