我正在编写一个程序,该程序将接收一个后跟多个字符串的文件名作为参数。可选地,它可以采用-count
参数;
./program [-count n] <filename> <string1> <string2> ...
这是我写的代码:
PO::positional_options_description l_positionalOptions;
l_positionalOptions.add("file", 1);
l_positionalOptions.add("strings", -1);
PO::options_description l_optionsDescription;
l_optionsDescription.add_options()
("count", PO::value<int>()->default_value(1), "How many times to write"),
("file", PO::value<std::string>(), "Output file name"),
("strings", PO::value<std::vector<std::string>>()->multitoken()->zero_tokens()->composing(), "Strings to be written to the file");
PO::command_line_parser l_parser {argc, argv};
l_parser.options(l_optionsDescription)
.positional(l_positionalOptions)
.allow_unregistered();
PO::variables_map l_userOptions;
try {
PO::store(l_parser.run(), l_userOptions);
}
catch (std::exception &ex) {
std::cerr << ex.what() << std::endl;
exit(1);
}
然而,当我运行./program file.out str1 str2 str3
时,它失败了,并显示:
unrecognised option 'str1'
我做错了什么?这在boost::program_options中是否可行?
我想明白了。它是最愚蠢的。
问题是我在add_options()
中的每个条目之后都有一个,
。这使得只有第一个条目会被保存。