我正在使用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。