5

boost::program_options で指定された引数の後にすべての値を収集する方法はありますか? ただし、注意が必要な点が 2 つあります。認識されない引数を受け入れる必要があることと、ダッシュを含む可能性のある値を受け入れる必要があることです。command_line_parser と parse_command_line をいじってみましたが、認識されないかダッシュを含む値のいずれかを取得できますが、両方を取得することはできません。

例: ./myprog Ignore1 Ignore2 --Accept 1 --AlsoAccept 2 --AcceptAll 1 2 -3 4

--AcceptAll が最後に渡されたフラグであることを確認することにはあまり関心がありません。そのフラグの後のすべての文字列のベクトルを返すロジックを探しています。

4

2 に答える 2

3

位置オプションを試しましたか?

#include <boost/program_options.hpp>

#include <boost/foreach.hpp>

#include <iostream>
#include <string>

namespace po = boost::program_options;

int
main( unsigned int argc, char** argv )
{
    std::string foo;
    std::vector<std::string> extra;
    po::options_description desc;
    desc.add_options()
        ("foo", po::value<std::string>(&foo), "some string")
        ("extra-options", po::value(&extra), "extra args" )
        ;

    po::positional_options_description p;
    p.add("extra-options", -1);

    po::variables_map vm;
    po::store(
            po::command_line_parser(argc, argv).
            options(desc).
            positional(p).
            run(),
            vm);
    po::notify(vm);

    BOOST_FOREACH( const std::string& i, extra ) {
        std::cout << i << std::endl;
    }

    return 0;
}

サンプルセッション

samm@macmini ~> ./a.out --foo bar far hello world how are you
far
hello
world
how
are
you
samm@macmini ~>
于 2010-07-30T02:35:02.730 に答える
1

--あなたの質問への答えは、オプション終了オプションの適切な処理に関する私の質問への答えとほぼ同じです: Using '--' as end-of-options marker with boost::program_options . 変更する必要があるのは、 で を置き換えることだけ--AcceptAllです。--extra_style_parser

于 2011-04-01T13:19:18.850 に答える