Gần đây tôi đã bắt đầu sử dụng boost::program_options
và thấy nó rất thuận tiện. Điều đó nói rằng, có một điều còn thiếu là tôi không thể tự viết mã theo cách tốt:boost :: program_options: lặp lại và in tất cả các tùy chọn
Tôi muốn lặp qua tất cả các tùy chọn đã được thu thập trong boost::program_options::variables_map
để xuất chúng trên màn hình. Điều này sẽ trở thành một chức năng thuận tiện, mà tôi có thể chỉ cần gọi để liệt kê tất cả các tùy chọn đã được thiết lập mà không cần cập nhật hàm khi tôi thêm các tùy chọn mới hoặc cho mỗi chương trình.
Tôi biết rằng tôi có thể kiểm tra và xuất các tùy chọn riêng lẻ, nhưng như đã nói ở trên, điều này sẽ trở thành một giải pháp chung không biết gì về các tùy chọn thực tế. Tôi biết thêm rằng tôi có thể lặp lại nội dung của variables_map
vì nó chỉ đơn giản là mở rộng std::map
. Sau đó tôi có thể kiểm tra loại containd trong biến được lưu trữ boost::any
và sử dụng .as<>
để chuyển đổi loại trở lại thành loại thích hợp. Nhưng điều này có nghĩa là mã hóa một khối chuyển đổi dài với một trường hợp cho mỗi loại. Và điều này không giống như phong cách mã hóa tốt với tôi.
Vì vậy, câu hỏi đặt ra là, có cách nào tốt hơn để lặp qua các tùy chọn này và xuất chúng không?
Cảm ơn bạn đã liên kết và các ý tưởng về RTTI . Tôi đã hy vọng rằng tôi có thể ngăn chặn xây dựng một cấu trúc cho tất cả các loại hỗ trợ mà tôi sẽ phải quản lý nếu các loại tăng, nhưng có vẻ như điều này sẽ không thể. Về cơ bản, tôi muốn chuyển buck sang các loại - như thể chúng hỗ trợ 'toán tử <<' mọi thứ hoạt động tốt, nếu không biên dịch sẽ thất bại. – shiin