返回首页

boost program_options

使用 program_options 作为 cpp 的命令行解析工具

命名参数

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

using namespace std;
namespace asio = boost::asio;
namespace ip = asio::ip;
using tcp = ip::tcp;
using uint16 = uint16_t;
namespace po = boost::program_options;
int main(int argc, char *argv[]) {
  po::options_description od("App");
  bool help = false;
  string listen = "";
  int port = 0;
  od.add_options()("help,h", po::bool_switch(&help), "print help")(
      "listen,l", po::value<string>(&listen)->required(),
      "listen addr")("port,p", po::value<int>(&port)->required(), "listen port");
  po::variables_map vm;
  po::store(po::parse_command_line(argc, argv, od), vm);
  po::notify(vm);
  if (help) {
    cout << od << endl;
  }
}

数组参数

  vector<string> files;
  od.add_options()("files,f", po::value<vector<string>>(&files)->multitoken(),
                   "input files");

位置参数

vector<string> files;
  od.add_options()("files,f", po::value<vector<string>>(&files)->multitoken(),
                   "input files");
  po::positional_options_description pos;
  pos.add("files", -1);
  po::variables_map vm;
  po::store(
      po::command_line_parser(argc, argv).options(od).positional(pos).run(),
      vm);
  po::notify(vm);