Есть ли способ узнать, какой ключ был задействован, когда вызов, подобный следующему, не работает?Лучшая обработка отсутствующего/неправильного ключа в boost :: program_options
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
Если ключ отсутствует на карте, или не конвертируется в целом, я получаю довольно неинформативное bad_any_cast, и я не могу знать, какие-либо из следующих действий:
- ключ участия
- сохраненное значение, или даже если оно есть.
- типы участвуют
Я не могу найти какого-либо решения, которое не включает в себя либо изменения заголовка наддува или оборачивать каждый вызов выше в try..catch блоке. Я думаю, что это распространенная проблема, поэтому, возможно, кто-то еще знает лучший подход.
Я считаю, что образцы, представленные в документации, обычно проверяют каждую опцию, используя 'if (vm.count (" some_key ")! = 0)', поэтому, похоже, именно так они и предполагали, что они будут использоваться. –
Нужно проверить, что каждый ключ менее идеален, но я надеялся на менее подробное решение. Я заметил, что в последних версиях boost вы можете установить опцию как «обязательную», тем самым создавая исключение, если ключ отсутствует. Конечно, это не будет работать для дополнительных значений, и у меня все еще есть проблема обработки недопустимых значений. –