다음과 같은 호출이 실패 할 때 어떤 키가 관련되었는지 알 수있는 방법이 있습니까? boost :: program_options의 missing/wrong key 처리 개선
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
키가 맵에서 누락, 또는 int로 변환하지 않는 경우
, 나는 오히려 가치가없는 bad_any_cast을 얻을, 나는 다음 중 하나를 알 수 없습니다 :- 키 것은 참여를
- 저장된 값 또는 해당 값이 있더라도.
- 유형은
내가 부스트 헤더를 수정하거나에서는 try..catch 블록 위의 모든 호출을 포장하거나 포함하지 않는 용액을 찾을 수있었습니다. 저는 그것이 일반적인 문제라고 생각합니다. 아마도 다른 누군가가 더 나은 접근법을 알고있을 것입니다.
문서에 제공된 샘플은 일반적으로'if (vm.count ("some_key")! = 0)'를 사용하여 모든 옵션을 확인합니다. 따라서 사용 의도가있는 것 같습니다. –
모든 단일 키를 확인하는 것이 이상적이지는 않지만, 덜 장황한 솔루션에서 기대하고있었습니다. 최근 버전의 부스트 버전에서는 "필수"로 옵션을 설정할 수 있으므로 키가 누락 된 경우 예외가 발생합니다. 물론이 옵션 값에 대해 작동하지 않습니다, 그리고 난 여전히 잘못된 값을 처리하는 문제가 –