7

boost :: program_optionsを使用して、C++アプリケーションへの引数を指定しています。一連の選択肢から1つの引数が必要であることを指定する方法はありますか?

<application> [--one int-value1 | --two string-value2 | --three]

上記では、ユーザーは選択肢の1つを正確に渡す必要があります:--one、、、--twoまたは--three

これは手動で行うこともできますが、これの代わりに組み込みのメカニズムがあることを願っています。

#include <boost/program_options.hpp>

namespace po = boost::program_options;

int main(int argc, char *argv[]) {
  po::options_description options;
  int band;
  std::string titles_path;

  options.add_options()
    ("one", po::value<int>(&band)->default_value(1))
    ("two", po::value<std::string>(&titles_path))
    ("three");

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

  if (1 != (vm.count("one") + vm.count("two") + vm.count("three"))) {
    std::cerr << options << std::endl;

    return -11;
  }
  return 0;
}

ブーストオプションでこれを行うためのより良い方法はありますか?

4

1 に答える 1

5

program_optionsバリデーターは、パラメーターの相互依存関係(負の依存関係を含む)をサポートしていません。

おそらく、あなたが今していることは、実際には最良の選択肢です。

于 2013-03-19T14:28:38.217 に答える