boost之program_option-命令列引數處理(霜之小刀)
阿新 • • 發佈:2018-11-17
歡迎轉載和引用,若有問題請聯絡
若有疑問,請聯絡
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;
}
}