Boost :: program_options bug أو الميزة؟
-
25-09-2019 - |
سؤال
مثال بسيط جدا:
#include <string>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
int main(int argc, char* argv[])
{
po::options_description recipients("Recipient(s)");
recipients.add_options()
("csv", po::value<std::string>(), "" )
("csv_name", po::value<unsigned>(), "" )
;
po::options_description cmdline_options;
cmdline_options.add(recipients);
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(cmdline_options).run(), vm);
po::notify(vm);
return 0;
}
وبعض الاختبارات:
>Test --csv test
in option 'csv_name': invalid option value
>Test --csv_name test
in option 'csv_name': invalid option value
>Test --csv_name 0
>Test --csv text
in option 'csv_name': invalid option value
>Test --csv 0
>Test --csv_name 0
>Test --csv_name 0 --csv text
multiple occurrences
يبدو أن هذا التعزيز :: program_option تهديد المعلمة "CSV" باسم "CSV_NAME".
هل هي ميزة أم خطأ؟
المحلول
نعم ، هذه "ميزة" بسبب تحليل الخيارات الافتراضية نمط. حاول بخيارات قصيرة ، مثل:
recipients.add_options()
("csv,c", po::value<std::string>(), "" )
("csv_name,C", po::value<unsigned>(), "" )
;
أو العب مع basic_command_line_parser::style(int)
طريقة. لم أحاول هذا ، لذا ymmv.
نصائح أخرى
أخشى أن هذا خطأ. ولكن ، يجب إصلاحه في 1.42 - ما هو الإصدار الذي جربته؟
لا تنتمي إلى StackOverflow