使用Boost.ProgramOptions

时间:2019-03-29 09:19:52

标签: c++ validation boost command-line

我正在使用Boost.ProgramOptions来解析命令行。有些选项确实有其他要求。例如nonexistingPath,它采用的路径必须不存在(惊奇!)

为此,您可以创建一个自定义类,从bfs::path包装或继承,并从Boost.ProgramOptions(请参阅https://www.boost.org/doc/libs/1_58_0/doc/html/program_options/howto.html#idp337860416)重载validate函数,该函数检查字符串是否可转换。到bfs::path(不应失败)并在路径存在的情况下引发异常。

但是:如何处理默认值?

到目前为止,我可以告诉图书馆这样的作品:

  • 标记命令行
  • 对于找到的每个参数,请调用validate函数,该函数会将从命令行接收的字符串转换为所需的类型
  • 将其复制到值映射中
  • 对于每个空选项,将默认值复制到地图中

缺少的是默认值的验证。可能是因为validate仅用于检查语法,而不是检查选项的语义。

是否存在通过Boost.ProgramOptions验证默认值的“标准”方法?

nonexistingPath的构造函数中验证值的想法失败了,因为即使用户在命令行上覆盖了默认值,这也会/可能会导致默认值的构造。因此,需要一个钩子来验证它使用的默认值IFF。

0 个答案:

没有答案