【问题标题】:Parsing options with boost使用 boost 解析选项
【发布时间】:2014-04-15 14:27:37
【问题描述】:

我的代码崩溃了:

    if(argc<2)
    {
      printf("Too few arguments\n");
    }
    else if(argc>=2)
    {
        namespace po = boost::program_options;
        po::options_description desc("Options");
        desc.add_options()
            ("c")
            ("d")
            ("filename", po::value<string>());

        po::variables_map vm;
        po::store(po::parse_command_line(argc,argv,desc),vm);
        po::notify(vm);
        if(vm.count("c"))
        {
          // option c
        }
        else if(vm.count("d"))
        {
          // option d
        }
    }

调试错误:此应用程序已请求运行时终止 它以通常的方式...

我希望我的程序后面有选项 -c 和 -d 以及可选的文件名。如何将选项添加到选项描述中,接下来如何检查我是否有选项 -c、-d 以及我是否有文件名作为命令行参数?

我已经阅读了 boost 网站上关于 boost/program_options 的教程,但我不知道该怎么做。

【问题讨论】:

  • 你有没有遇到this example,它使用vm.count
  • 我改进了我的代码,对吗?
  • 类似的东西。我用这个已经太久了。如果它在测试时似乎有效,那么很有可能它确实有效。

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


【解决方案1】:

上面没有为我编译(提升 1_55_0)。

我修复并完成了它:

#include <boost/program_options.hpp>
#include <boost/program_options/options_description.hpp>
#include <iostream>

int main(int argc, char** argv)
{
    if(argc<2)
    {
        printf("Too few arguments\n");
    }
    else
    {
        namespace po = boost::program_options;
        po::options_description desc("Options");
        desc.add_options()
            ("c", "")
            ("d", "")
            ("filename", po::value<std::string>()->default_value(""));

        po::variables_map vm;
        po::store(po::parse_command_line(argc,argv,desc),vm);
        po::notify(vm);

        std::cout << "c parsed: "  << vm.count("c") << "\n";
        std::cout << "d parsed: "  << vm.count("d") << "\n";
        std::cout << "filename: '" << boost::any_cast<std::string>(vm["filename"].value()) << "'\n";
    }
}

当被调用时,例如--c --filename blablabla.txt 打印出来

c parsed: 1
d parsed: 0
filename: 'blablabla.txt'

Live On Coliru

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2013-07-05
    • 2011-03-05
    相关资源
    最近更新 更多