【问题标题】:boost::program_options bug or feature?boost::program_options 错误或功能?
【发布时间】:2010-04-07 02:38:50
【问题描述】:

非常简单的例子:

#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

看起来 boost::program_option 威胁参数“csv”为“csv_name”。
是功能还是错误?

【问题讨论】:

    标签: c++ boost boost-program-options


    【解决方案1】:

    是的,这是一个“功能”,因为默认选项解析 style。尝试使用简短的选项,例如:

    recipients.add_options()
        ("csv,c",      po::value<std::string>(), ""  )
        ("csv_name,C", po::value<unsigned>(),    ""  )
    ;
    

    或者使用basic_command_line_parser::style(int) 方法。这个我没试过,所以YMMV。

    【讨论】:

    • 我是对的。 parser.style(po::command_line_style::default_style ^ po::command_line_style::allow_guessing);帮我。谢谢。
    【解决方案2】:

    恐怕这是一个错误。但是,它应该在 1.42 中修复 -- 您尝试使用哪个版本?

    【讨论】:

    • 我使用的是 1.42.0 版。正如我已经说过的 parser.style(po::command_line_style::default_style ^ po::command_line_style::allow_guessing);帮助我。
    • 嗨弗拉基米尔。很高兴看到作者为库回答问题 :) 你认为这个错误是/曾经是什么 - 默认解析样式?
    • 不,默认样式就可以了。但是,如果您有两个选项,一个名为“csv”,另一个名为“csv_name”,并且命令行有“--csv”,那么选择完全匹配而不是近似匹配是合理的。我相信解决方法是这样的:svn.boost.org/trac/boost/changeset/59744
    • 嗨弗拉基米尔。 Boost 1.43 发布,但似乎不包括错误修复。请你确认一下这个 bug 在 boost 1.43 中没有修复好吗?
    • 不幸的是,我似乎未能将此修复程序合并到主干——因此您可以从我上面提供的变更集链接手动应用它。真的很抱歉!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多