22

コマンドライン引数の一部にデフォルト値を使用したいと思います。デフォルトオプションが何であるかを知るにはどうすればよいですprogram_optionsか。また、ユーザーが引数を指定しない場合は、プログラムにデフォルト値を使用するように指示するにはどうすればよいですか。

デフォルト値3で、殺人的な大暴れで送信するロボットの数を指定する引数が必要だとします。

robotkill --robots 5を生成5 robots have begun the silicon revolutionしますが、 robotkill(引数が指定されていない場合)はを生成し3 robots have begun the silicon revolutionます。

4

1 に答える 1

25

program_optionsユーザーがオプションを指定しない場合、オプションにデフォルト値が自動的に割り当てられます。ユーザーが特定のオプションを提供したかどうかを確認する必要はありません。どちらの場合も同じ割り当てを使用してください。

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

namespace po = boost::program_options;

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

  po::options_description desc("Usage");
  desc.add_options()
    ("robots", po::value<int>()->default_value(3), 
     "How many robots do you want to send on a murderous rampage?");

  po::variables_map opts;
  po::store(po::parse_command_line(argc, argv, desc), opts);

  try {
    po::notify(opts);
  } catch (std::exception& e) {
    std::cerr << "Error: " << e.what() << "\n";
    return 1;
  }

  int nRobots = opts["robots"].as<int>(); 
  // automatically assigns default when option not supplied by user!!

  std::cout << nRobots << " robots have begun the silicon revolution" 
        << std::endl;
  return 0;
}
于 2012-04-17T16:15:17.037 に答える