通过提升解析选项

时间:2014-04-15 14:27:37

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

我的代码崩溃了:

    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以及可选的文件名。如何add_options进入options_description,接下来如何检查我是否有选项-c,-d以及我是否有文件名作为命令行参数?

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

1 个答案:

答案 0 :(得分: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