C++ boost::程序选项错误或功能?
非常简单的例子:C++ boost::程序选项错误或功能?,c++,boost,boost-program-options,C++,Boost,Boost Program Options,非常简单的例子: #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() ("c
#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;
}
看起来boost::program\u选项威胁参数“csv”为“csv\u名称”。这是一个功能还是一个bug?是的,这是一个“功能”,因为默认选项解析。尝试使用短选项,例如:
recipients.add_options()
("csv,c", po::value<std::string>(), "" )
("csv_name,C", po::value<unsigned>(), "" )
;
recipients.add_options()
(“csv,c”,po::value(),“”)
(“csv_名称,C”,po::value(),“”)
;
或者玩弄这种方法。我没有试过这个,所以YMMV。恐怕这是个bug。但是,它应该在1.42中修复——您尝试了哪个版本?我是对的。style(po::命令行样式::默认样式^po::命令行样式::允许猜测);帮助我。谢谢。我用的是1.42.0版。正如我已经说过的parser.style(po::command\u line\u style::default\u style^po::command\u line\u style::allow\u gussing);帮帮我,嗨,弗拉基米尔。很高兴看到作者回答这个库:)你认为这个bug是什么?默认的解析风格?不,默认的风格很好。但是,如果您有两个选项,一个名为“csv”,另一个名为“csv_name”,并且命令行有“-csv”,那么与近似匹配相比,选择完全匹配是合理的。我相信解决办法是:嗨,弗拉基米尔。Boost1.43已经发布,但看起来没有包含错误修复。请确认boost 1.43中没有修复该错误,好吗?不幸的是,我似乎无法将该修复程序合并到主干中——因此您可以从我上面给出的变更集链接手动应用它。我真的很抱歉!
recipients.add_options()
("csv,c", po::value<std::string>(), "" )
("csv_name,C", po::value<unsigned>(), "" )
;