Program_optionsをWindows環境で使用する方法
Boost::Program_optionsをWindows環境で使用する方法について。
Program_optionsをWindowsで使おうとすると2つ問題が起こる。
- WinMainにはargc、argvがない
- デフォルトでは「/h」とかのスラッシュから始まるオプションは受け付けてくれない。
argc,argvについては「__argc」、「__argv」(「__wargv」)を使うという手段がある。
または、「boost::program_options::split_winmain」というのが用意されているので、それを使用すればよい。
スラッシュについてはパース時のスタイルを変更してやればよい。
具体的にはboost::program_options::command_line_style::allow_slash_for_short」、
「 boost::program_options::command_line_style::allow_long_disguise」を使う。
まとめるとこんな感じ
using namespace boost::program_options; variables_map vm; int style = command_line_style::unix_style | command_line_style::allow_long_disguise // 「-num=10」のようなスタイルを許可 // (「--num=10」じゃなくてもOKにする) | command_line_style::allow_slash_for_short // 「/」によるオプション開始の許可 ; std::vector<std::wstring> args = split_winmain(cmdline); store(wcommand_line_parser(args).style(style).options(cmdline_desc).run(), vm);
ここでは「unix_style」を使用しているが、これだと「-h」とかの引数も受け付けてしまうため、これを禁止したい場合は「unix_style」を使用せず、自分ですべてオプションを定義してやる必要がある。
「unix_style」は
unix_style = (allow_short | short_allow_adjacent | short_allow_next | allow_long | long_allow_adjacent | long_allow_next | allow_sticky | allow_guessing | allow_dash_for_short)
なので、あとはよしなに・・・
ちなみに、Program_optionsについての記事が検索してもそんなに出てこないんだけど、余り皆使っていないのかな?
自分はこれ結構好きなんだけど。