欢迎转载和引用,若有问题请联系
若有疑问,请联系
Email : lihn1011@163.com
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;
}
}