2009-05-08 40 views
11

Tôi có một ứng dụng sử dụng Boost.Program_options để lưu trữ và quản lý các tùy chọn cấu hình của nó. Chúng tôi hiện đang di chuyển ra khỏi tệp cấu hình và sử dụng cấu hình được tải cơ sở dữ liệu thay thế. Tôi đã viết một API đọc các tùy chọn cấu hình từ cơ sở dữ liệu theo tên máy chủ và tên cá thể. (cool!) Tuy nhiên, theo như tôi có thể thấy không có cách nào để tự chèn các tùy chọn này vào trong Program_options tăng. Có ai đã sử dụng điều này trước đây, bất kỳ ý tưởng? Các tài liệu từ tăng dường như chỉ ra cách duy nhất để có được công cụ trong bản đồ đó là bởi chức năng lưu trữ, mà đọc từ dòng lệnh hoặc tập tin cấu hình (không phải những gì tôi muốn). Về cơ bản tìm kiếm một cách để tự chèn các giá trị đọc DB vào bản đồ.Bạn làm cách nào để chèn các tùy chọn theo cách thủ công vào boost.Program_options?

+0

tôi đã tìm thấy không có cách nào tốt để làm ngắn này của định dạng một char ** như thể nó là một tham số dòng lệnh. Nếu ai đó tìm thấy một cái gì đó cho tôi biết! – Alex

Trả lời

13

câu trả lời của tôi đến một chút quá muộn, nhưng tôi đã dành một thời gian cố gắng làm một cái gì đó tương tự và tìm thấy một giải pháp khó chịu rõ ràng (trong trường hợp bất cứ ai khác đang tìm kiếm này) ...

Nhắc lại rằng boost::program_options::variables_map xuất phát từ std::map<std::string, boost::program_options::variable_value> , bạn có thể làm chế biến đồ STL hoàn toàn hợp pháp bao gồm một chèn ...

 
namespace po = boost::program_options; 
po::variables_map vm; 
vm.insert(std::make_pair("MyNewEmptyOption", po::variable_value()); 
vm.insert(std::make_pair("MyNewIntOption", po::variable_value(32, false)); 
po::notify(vm); 

-Edmond-

+1

Không giống như kế thừa program_options từ std :: map to me. Tôi thấy nó bắt nguồn từ: abstract_variables_map. Chưa kiểm tra nếu đó là một std được thiết kế lại :: bản đồ được nêu ra. – Alex

+0

Giải pháp tuyệt vời! – russoue

+0

@ Alex, nó kế thừa từ [cả hai] (http://www.boost.org/doc/libs/1_55_0/boost/program_options/variables_map.hpp). – russoue

3

Bạn đã xem các hàm extra_parser hoặc allow_unregistered của Boost::Program_Options? Tùy thuộc vào chính xác cách chương trình của bạn hoạt động, một hoặc cả hai chương trình này sẽ có thể hỗ trợ những gì bạn muốn.

Các vấn đề liên quan