Có cách nào để biết khóa nào có liên quan khi cuộc gọi như sau không thành công?Xử lý tốt hơn khóa bị thiếu/sai trong tăng cường :: program_options
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
Nếu khóa là mất tích từ bản đồ, hoặc không chuyển đổi sang int, tôi nhận được một bad_any_cast thay vì không đủ thông tin, và tôi không thể biết bất cứ điều nào sau đây:
- chìa khóa có liên quan
- giá trị được lưu trữ hoặc thậm chí nếu nó ở đó.
- các loại tham gia
tôi không thể tìm thấy của bất kỳ giải pháp mà không liên quan đến một trong hai thay đổi tiêu đề tăng hoặc gói mỗi cuộc gọi đến trên trong một khối try..catch. Tôi nghĩ rằng đó là một vấn đề phổ biến, vì vậy có thể ai đó biết cách tiếp cận tốt hơn.
Tôi tin rằng các mẫu được cung cấp trong tài liệu thường kiểm tra mọi tùy chọn bằng cách sử dụng 'if (vm.count (" some_key ")! = 0)', do đó, có vẻ như đây là cách chúng dự định sử dụng. –
Phải kiểm tra mọi chìa khóa đơn giản là lý tưởng, tôi đã hy vọng trong một giải pháp tiết kiệm hơn. Tôi nhận thấy rằng trong các phiên bản gần đây, người dùng có thể đặt tùy chọn là "bắt buộc", do đó tăng ngoại lệ nếu khóa bị thiếu. Tất nhiên điều này sẽ không hoạt động đối với các giá trị tùy chọn và tôi vẫn gặp sự cố khi xử lý các giá trị không hợp lệ –