【问题标题】:Does boost::program_options support requiring one of a series of alternatives?boost::program_options 是否支持需要一系列替代方案中的一个?
【发布时间】:2013-03-19 14:05:57
【问题描述】:

我正在使用 boost::program_options 为我的 C++ 应用程序指定参数。有没有办法指定一组备选方案中需要一个参数?

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

在上述情况下,用户必须通过以下选项之一:--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;
}

有没有更好的方法来使用增强选项来做到这一点?

【问题讨论】:

    标签: c++ boost boost-program-options


    【解决方案1】:

    program_options 验证器不支持参数相互依赖(包括负依赖)。

    也许你现在做的实际上是最好的选择。

    【讨论】:

    • 有没有办法获得更好的帮助/使用信息?就像在一个普通的 unix 应用程序中一样,正如 WilliamKF 所希望的那样: [--one int-value1 | --两个字符串值2 | - 三]。因此,至少应该在帮助中看到应该传递的内容。
    猜你喜欢
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多