1. 程式人生 > >boost之program_option-命令列引數處理(霜之小刀)

boost之program_option-命令列引數處理(霜之小刀)

歡迎轉載和引用,若有問題請聯絡
若有疑問,請聯絡
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; } }