コマンドライン引数の一部にデフォルト値を使用したい。 program_options
にデフォルトのオプションを伝えるにはどうすればよいですか。また、ユーザーが引数を指定しない場合は、プログラムにデフォルト値を使用するように伝えるにはどうすればよいですか?
デフォルト値3で殺人暴れ回って送信するロボットの数を指定する引数が必要だとします。
robotkill --robots 5
は5 robots have begun the silicon revolution
を生成しますが、robotkill
(引数が指定されていない)は3 robots have begun the silicon revolution
を生成します。
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;
}