【发布时间】:2011-04-13 10:42:42
【问题描述】:
当像下面这样的调用失败时,有没有办法知道涉及哪个键?
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
如果地图中缺少密钥,或者无法转换为 int,我会得到一个信息量不大的 bad_any_cast,并且我不知道以下任何内容:
- 涉及的关键
- 存储的值,或者即使它存在。
- 涉及的类型
我找不到任何不涉及修改 boost 标头或将每个对上述内容的调用包装在 try..catch 块中的解决方案。 我认为这是一个常见问题,所以也许其他人知道更好的方法。
【问题讨论】:
-
我相信文档中提供的示例通常会使用
if(vm.count("some_key") != 0)检查每个选项,所以这似乎是他们打算使用它的方式。 -
不得不检查每一个键虽然不太理想,但我希望有一个不那么冗长的解决方案。我注意到在最近版本的 boost 中,可以将选项设置为“必需”,从而提高如果缺少密钥,则异常。当然这不适用于可选值,我仍然有处理无效值的问题
标签: c++ boost boost-program-options boost-any