Mar*_*ele 5 c++ boost boost-program-options boost-any
当下面的呼叫失败时,有没有办法知道涉及哪个密钥?
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
Run Code Online (Sandbox Code Playgroud)
如果地图中缺少密钥,或者无法转换为int,我会得到一个相当无法提供信息的bad_any_cast,我无法知道以下任何内容:
我找不到任何解决方案,不涉及修改boost标头或在try..catch块中包装对上面的每个调用.我认为这是一个常见的问题,所以也许其他人知道更好的方法.
马可,
如果不修改库就无法获得更好的诊断。
但是,请注意,一般来说,我不确定这种情况下的异常是否应该非常详细: - 如果您使用错误的类型来访问变量,则会出现编码错误。您可以使用调试器轻松跟踪它 - 如果访问不存在的变量,则需要 if vm.count 或使用默认值。同样,这可能是一个编码错误,最好使用调试器来解决。
我同意 bad_any_cast 是可以改进的,但似乎可以向用户报告的异常不应该是这里的目标,其中异常是编码错误的结果。
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |