boost::program_options

abstract

必要なヘッダ
<boost/program_options.hpp>
出来ること
コマンドラインオプション等の解析
リファレンス
en

sample

#include <iostream>
#include <string>
#include <boost/program_options.hpp>
using namespace std;
using namespace boost::program_options;

int main(int argc, char* argv[])
{
	// オプションの設計
	options_description opt("オプション");
	opt.add_options()
	  ("help,h",                                  "ヘルプを表示")
	  ("op"   , value<string>(),                  "演算の種類(add,sub,mul,div)")
	  ("lhs,L", value<int>()->default_value(100), "左")
	  ("rhs,R", value<int>()->default_value(200), "右");

	// argc, argv を解析して、結果をvmに格納
	variables_map vm;
	store(parse_command_line(argc, argv, opt), vm);
	notify(vm);

	if( vm.count("help") || !vm.count("op") )
		cout << opt << endl; // ヘルプ表示
	else
	{
		string op = vm["op"].as<string>();
		int   lhs = vm["lhs"].as<int>();
		int   rhs = vm["rhs"].as<int>();
		if( op=="add" ) cout << lhs+rhs << endl;
		if( op=="sub" ) cout << lhs-rhs << endl;
		if( op=="mul" ) cout << lhs*rhs << endl;
		if( op=="div" ) cout << lhs/rhs << endl;
	}
}

使用例

> ./a.out
オプション:
  -h [ --help ]           ヘルプを表示
  -O [ --op ] arg         演算の種類(add,sub,mul,div)
  -L [ --lhs ] arg (=100) 左
  -R [ --rhs ] arg (=200) 右
> ./a.out --op=sub -L 999
799

etc

getopt みたいな感じでコマンドライン引数を解析してくれるライブラリです。 使い方は上のサンプルでなんとなく掴めるのではないでしょうか。 ここで定義したoptions_descriptionを使い回して、コマンドライン引数の解析だけでなく /etc/*.conf みたいな設定定義ファイルの解析をすることもできます。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0