更好地处理boost :: program_options中的丢失/错误键

时间:2011-04-13 10:42:43

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

当下面的调用失败时,有没有办法知道涉及哪个密钥?

boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();

如果地图中缺少密钥,或者无法转换为int,我会得到一个相当无法提供信息的bad_any_cast,我无法知道以下任何内容:

  • 涉及的关键
  • 存储的值,或者即使它存在。
  • 涉及的类型

我找不到任何不涉及修改boost标头或在try..catch块中包含对上述调用的解决方案。 我认为这是一个常见的问题,所以也许其他人知道更好的方法。

1 个答案:

答案 0 :(得分:3)

马科,

如果不修改库,就无法获得更好的诊断。

但是,请注意,一般情况下,我不确定此案例中的例外情况应该非常详细: - 如果使用错误的类型来访问变量,则会出现编码错误。您可以使用调试器轻松跟踪它 - 如果访问不存在的变量,则需要vm.count或使用默认值。同样,它可能是使用调试器最好地解决的编码错误。

我同意bad_any_cast是可以改进的东西,但似乎不能向用户报告的异常应该是这里的目标,其中异常是编码错误的结果。