boost::program_options がコマンドライン引数を解析した後、非フラグおよび非オプションのトークンを取得するにはどうすればよいですか
-
19-09-2019 - |
質問
Python では、次のように構築できます。 オプトパース インスタンスを作成して、オプションと非オプション/フラグを 2 つの異なるバケットに自動的に除外します。
(options, args) = parser.parse_args()
boost::program_options を使用して、残りの非オプションおよび非フラグのトークンであるトークンのリストを取得するにはどうすればよいですか?
例えばプログラムにフラグがある場合
--foo
--bar BAR
そしてコマンドラインに次のように渡します。
--foo hey --bar BAR you
「ねえ」と「あなた」というトークンのみで構成されるリストを取得するにはどうすればよいですか
解決
IIRC では、次のことを組み合わせて使用する必要があります。 positional_options_description
そして 隠しオプション. 。アイデアは、(1) 通常のオプションを追加し、それに名前を付けることです。おそらく次のようなものです。 --positional=ARG
, 、(2) ヘルプの説明にそのオプションを含めない、(3) 設定する command_line_parser
すべての位置引数を次のように扱う --positional
が指定され、(4) 以下を使用して位置引数を取得します。 vm["positional"].as< std::vector<std::string> >()
.
おそらくソース ツリーのどこかにサンプルがあると思いますが、現在このマシンにはありません。
他のヒント
ここでは一例であります:
namespace po = boost::program_options;
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;
m_cmdLine.add_options()
(/*stuff*/)
("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
.options(m_cmdLine)
.positional(m_positional)
.allow_unregistered()
.run();
// store, notify, etc
それからちょうど文字列のベクトルとして「入力」という名前のオプションを取得し、あなたはすべてのセットです。
所属していません StackOverflow