5

Boost.Program_options は、次のようにコマンド ライン引数を介して複数のトークンを渡す機能を提供します。

std::vector<int> nums;    

po::options_description desc("Allowed options");
desc.add_options()
    ("help", "Produce help message.")
    ("nums", po::value< std::vector<int> >(&nums)->multitoken(), "Numbers.")
;

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);

しかし、固定数の引数のみを受け入れる好ましい方法は何ですか? 私ができる唯一の解決策は、値を手動で割り当てることです。

int nums[2];    

po::options_description desc("Allowed options");
desc.add_options()
    ("help", "Produce help message.")
    ("nums", "Numbers.")
;

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);

if (vm.count("nums")) {
   // Assign nums
}

これはちょっともったいない気がします。より良い解決策はありますか?

4

1 に答える 1

2

Boostライブラリは、事前定義されたメカニズムのみを提供します。クイック検索では、値の数が固定されているものは見つかりませんでした。ただし、これは自分で作成できます。これpo::value< std::vector<int> >(&nums)->multitoken()は、特殊なvalue_semanticクラスです。ご覧のとおり、このクラスはメソッドmin_tokensとを提供しますmax_tokens。これは、まさにあなたが望むことを実行しているようです。クラスの定義typed_valueこれは、呼び出したときに作成されるオブジェクトですpo::value< std::vector<int> >(&nums)->multitoken())を見ると、メソッドをオーバーライドする方法を把握できます。

于 2010-05-06T20:05:11.927 に答える