boost之program_option-命令行参数处理(霜之小刀)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lihn1987/article/details/78945002

欢迎转载和引用,若有问题请联系
若有疑问,请联系
Email : [email protected]
QQ:2279557541


命令行的参数处理什么xxx –xxx -x=xx -x
这种东西如果我们自己从argc,argv里面提取,我相信大家都会感觉非常恼火
于是我就找到了万能的boost,看里面有没有相关的库可以使用,这里就找到了program_option,下面我就演示了下boost的program_option的简单用法


#include <boost/program_options.hpp>
#include <iostream>
void print_vm(boost::program_options::options_description& opt, boost::program_options::variables_map &vm);
int main(int argc, char** argv)
{
    //首先定义一个命令行描述容器
    boost::program_options::options_description opt("demo option");
    //往option中添加各种命令选项
    opt.add_options()
        ("help,h", "help message\n other help message")//添加无需参数处理的选项
        //添加一个有默认参数的选项,意思是无论命令行是否加-f,这个参数都会存在
        ("filename, f", boost::program_options::value<std::string>()->default_value("123"), "filename message")
        //添加一个带隐藏值的参数,意思是如果不加=则使用该隐藏值作为参数值
        ("dir, d", boost::program_options::value<std::string>()->implicit_value("here"), "dir message");

    //对参数进行解析保存
    boost::program_options::variables_map vm;
    boost::program_options::store(boost::program_options::parse_command_line(argc, argv, opt), vm);
    //主要用于演示如何处理解析得到的参数
    print_vm(opt, vm);
    return 0;
}
void print_vm(boost::program_options::options_description& opt, boost::program_options::variables_map &vm)
{
    if(vm.count("help"))
    {//意思是说当参数有help参数是打印所有添加的参数选项
        std::cout<<opt<<std::endl;
    }
    if(vm.count("filename"))
    {//该参数应为有默认值所以一定会执行这一段
        std::cout<<vm["filename"].as<std::string>()<<std::endl;//演示了如何从vm中取出参数值
    }
    if(vm.count("dir"))
    {//该参数为隐藏参数,意味着如果不加-d则不会进入该段,但是如果使用-d,若不加=则使用隐藏参数
        std::cout<<vm["dir"].as<std::string>()<<std::endl;
    }
}

猜你喜欢

转载自blog.csdn.net/lihn1987/article/details/78945002