كيف يمكنك يدويا إدراج الخيارات في boost.Program_options؟
-
20-08-2019 - |
سؤال
ولدي تطبيق يستخدم Boost.Program_options لتخزين وإدارة خيارات التكوين الخاص بها. نحن نتحرك حاليا بعيدا عن ملفات التكوين واستخدام تكوين قاعدة بيانات تحميلها بدلا من ذلك. لقد كتبت على API الذي يقرأ خيارات التكوين من قاعدة البيانات عن طريق اسم المضيف واسم المثيل. (باردة!) ومع ذلك، بقدر ما أستطيع أن أرى لا توجد وسيلة لادخال هذه الخيارات في Program_options دفعة يدويا. وقد أي شخص يستخدم هذا من قبل، أي أفكار؟ يبدو أن مستندات من دفعة للإشارة إلى الطريقة الوحيدة للحصول على الاشياء في تلك الخريطة هي عن طريق وظيفة الحفظ، التي إما يقرأ من سطر الأوامر أو ملف التكوين (وليس ما أريد). أبحث في الأساس عن وسيلة لإدراج DB يدويا قراءة القيم في إلى الخريطة.
المحلول
وجوابي يأتي في وقت متأخر قليلا جدا، ولكن قضيت بعض الوقت في محاولة لفعل شيء مماثل وجدت حل واضح مزعج (طارئ أي شخص آخر هو يبحث عن هذا) ...
وإذ تشير إلى أن boost::program_options::variables_map
مستمد من std::map<std::string, boost::program_options::variable_value>
، يمكنك أن تفعل تجهيز خريطة STL قانوني تماما بما في ذلك إدراج ...
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-
نصائح أخرى
هل نظرت إلى extra_parser
أو allow_unregistered
ظائف Boost::Program_Options
؟ اعتمادا على بالضبط كيف يعمل البرنامج، واحد أو كليهما يجب أن تكون قادرة على دعم ما تريد.