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