美文网首页
boost::program_options 用法

boost::program_options 用法

作者: analanxingde | 来源:发表于2018-12-27 09:25 被阅读10次

https://blog.csdn.net/morning_color/article/details/50241987
代码流程

  • 构造option_description对象和variables_map对象
  • add_options()->向option_description对象添加选项
  • parse_command_line()->将命令行输入的参数解析出来
  • store()->将解析出的选项存储至variables_map中
  • notify()->通知variables_map去更新所有的外部变量
  • count()->检测某个选项是否被输入
  • operator[]->取出选项的值
#include "business_processer.h"
#include <iostream>
#include <boost/program_options.hpp>

using namespace std;
using namespace boost;
using namespace boost::program_options;

int main(int argc,char* argv[])
{
    string config = "";
    string data_type = "";
    string version = "";
    try
    {
        options_description desc("Allowed options");
        desc.add_options()
                ("help,h", "produce help message")
                ("config,c", value<string>()->default_value(""), "set config")
                ("data_type,t", value<string>()->default_value(""), "set data type")
                ("version,v", value<string>()->default_value(""), "set version");

        variables_map vm;
        store(parse_command_line(argc, argv, desc), vm);
        notify(vm);

        if (vm.count("help"))
        {
            cerr << desc << "\n";
            return 1;
        }
        if (vm.count("config"))
        {
            if (vm["config"].as<string>().empty())
            {
                cerr<<"config is empty!!!"<<endl;
                return -1;
            }
            else
            {
                config = vm["config"].as<string>();
                //cerr<<"config is: "<<config<<endl;
            }
        }
        if (vm.count("data_type"))
        {
            if (vm["data_type"].as<string>().empty())
            {
                cerr<<"data_type is empty!!!"<<endl;
                return -1;
            }
            else
            {
                data_type = vm["data_type"].as<string>();
                //cerr<<"data_type is: "<<data_type<<endl;
            }
        }
        if (vm.count("version"))
        {
            if (vm["version"].as<string>().empty())
            {
                //cerr<<"version is empty!!!"<<endl;
            }
            else
            {
                version = vm["version"].as<string>();
                //cerr<<"version is: "<<version<<endl;
            }
        }
    }
    catch (std::exception& e)
    {
        cerr<<"error: "+string(e.what())<<endl;
        return -1;
    }
    catch(...)
    {
        cerr<<"Exception of unknown type!"<<endl;
        return -1;
    }

    search_business::BaseBusiness bp(data_type);
    if (false == bp.init(config, version))
    {
        cerr << "init error" << endl;
        return 1;
    }

    if (bp.work() != 0)
    {
        cerr << "work error" << endl;
        return 2;
    }
    return  0;
}

相关文章

网友评论

      本文标题:boost::program_options 用法

      本文链接:https://www.haomeiwen.com/subject/ewcymftx.html