在c++工程中,经常需要通过命令行参数来获取程序运行所需要的信息。作者在实际工作中学习了Boost库,这里根据作者的理解,写了一个依托boost库完成命令行参数提取的程序模版,请大佬批评!!
#define OK 0
#define Exit -99
// 主程序
#include<iostream>
#include"XApp.h"
int main(int argc, char* argv[])
{
XApp app;
try
{
if(app.Parse(argc,argv)!=OK)
{
throw std::runtime_error("Failed to parse the command line arguments !!!")
}
}
catch(const std::exception& e)
{
std::cout << e.what() << std::endl;
}
return OK;
}
//XApp.cpp
#include<iostream>
#include"XApp.h"
#include <boost/program_options.hpp>
#include <boost/property_tree/ptree.hpp>
namespace po = boost::program_options;
int XApp::Parse(int argc,char* argv[])
{
//定义命令行参数选项
po::options_description Xmessage("X options")
Xmessage.add_options()
("文件名",po::value<std::string>(),"需要传入的文件名")
("某个数",po::value<double>()->default_value(0.0),"可能需要传入的值大小");
//这里可以默认为0,防止没有传入//
po::variables_map vm; //定义解析的map 键是我们定义的命令行参数选项。值是对应传入的参数
try
{
保存解析的结果到map
po::store(po::parse_command_line(argc,argv,Xmessage), vm);
po::notify(vm);//
}
catch(const std::expection& e)
{
throw std::runtime_error("解析错误");
return Exit;
}
if(vm.count("文件名")) xx = vm["文件名"].as<std::string>();
if(vm.count("某个数")) sm = vm["某个数"].as<double>();
return OK;
}
标签:std,读取,argv,vm,C++,XApp,include,BOOST,po
From: https://blog.csdn.net/weixin_48724793/article/details/142151333