C++ 更好地处理boost::program_选项中缺少/错误的键
有没有办法知道在下面这样的调用失败时使用了哪个键C++ 更好地处理boost::program_选项中缺少/错误的键,c++,boost,boost-program-options,boost-any,C++,Boost,Boost Program Options,Boost Any,有没有办法知道在下面这样的调用失败时使用了哪个键 boost::program_options::variables_map vm; ... int foo_bar = vm["some_key"].as<int>(); boost::program\u options::variables\u map vm; ... int foo_bar=vm[“some_key”].as(); 如果映射中缺少密钥,或者无法转换为int,我会得到一个相当没有信息的bad_any_cast,并
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
boost::program\u options::variables\u map vm;
...
int foo_bar=vm[“some_key”].as();
如果映射中缺少密钥,或者无法转换为int,我会得到一个相当没有信息的bad_any_cast,并且我无法知道以下任何情况:
- 涉及的关键
- 存储的值,或者即使它在那里
- 涉及的类型
我同意bad_any_cast是可以改进的,但这里的目标似乎不是向用户报告异常,因为异常是编码错误造成的。我相信文档中提供的示例通常使用
if(vm.count(“some_key”)!=0检查每个选项。
,因此,这似乎是他们打算使用它的方式。虽然必须检查每个键都不太理想,但我希望有一个不太详细的解决方案。我注意到,在boost的最新版本中,可以将选项设置为“必需”,从而在缺少键时引发异常。当然,这对可选值不起作用,我仍然有处理无效值的问题谢谢你的回答。实际上,我的印象是,让用户为选项使用错误的值会抛出bad_any_cast异常,但事实并非如此。因此,是的,在这方面,它一定是一个编码错误。不过,我认为缺失的值可以得到更好的处理。