当下面的调用失败时,有没有办法知道涉及哪个密钥?
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
如果地图中缺少密钥,或者无法转换为int,我会得到一个相当无法提供信息的bad_any_cast,我无法知道以下任何内容:
我找不到任何不涉及修改boost标头或在try..catch块中包含对上述调用的解决方案。 我认为这是一个常见的问题,所以也许其他人知道更好的方法。
答案 0 :(得分:3)
马科,
如果不修改库,就无法获得更好的诊断。
但是,请注意,一般情况下,我不确定此案例中的例外情况应该非常详细: - 如果使用错误的类型来访问变量,则会出现编码错误。您可以使用调试器轻松跟踪它 - 如果访问不存在的变量,则需要vm.count或使用默认值。同样,它可能是使用调试器最好地解决的编码错误。
我同意bad_any_cast是可以改进的东西,但似乎不能向用户报告的异常应该是这里的目标,其中异常是编码错误的结果。