boost::program_options がコマンドライン引数を解析した後、非フラグおよび非オプションのトークンを取得するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/1314717

質問

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

それからちょうど文字列のベクトルとして「入力」という名前のオプションを取得し、あなたはすべてのセットです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top