私のコマンドラインが次の場合:
> prog --mylist=a,b,c
Boostのprogram_optionsを設定して、引数の3つの異なる引数値を確認できますmylist
か?program_optionsを次のように構成しました:
namespace po = boost::program_options;
po::options_description opts("blah")
opts.add_options()
("mylist", std::vector<std::string>>()->multitoken, "description");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, opts), vm);
po::notify(vm);
mylist
引数の値を確認すると、 1つの値がとして表示されa,b,c
ます。カンマで分割された3つの異なる値が表示されます。コマンドラインを次のように指定すると、これは正常に機能します。
> prog --mylist=a b c
また
> prog --mylist=a --mylist=b --mylist=c
program_optionsを構成してa,b,c
、それぞれが1つではなく3つの値としてベクターに挿入されるようにする方法はありますか?
Boost 1.41、g ++ 4.5.0 20100520を使用しており、c++0xの実験的な拡張機能を有効にしています。
編集:
受け入れられたソリューションは機能しますが、ベクトルを反復処理して値を手動で分割するよりも、IMOの方が複雑になります。結局、私はJames McNellisからの提案を受け取り、それをそのように実装しました。しかし、彼の解決策は回答として提出されなかったので、私はhkaiserから他の正しい解決策を受け入れました。どちらも機能しましたが、手動のトークン化の方が明確です。