首页 > 编程语言 >C++读取命令行参数的学习(BOOST库)

C++读取命令行参数的学习(BOOST库)

时间:2024-09-12 20:49:02浏览次数:12  
标签:std 读取 argv vm C++ XApp include BOOST po

在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

相关文章

  • 题解 力扣 LeetCode 105 从前序与中序遍历序列构造二叉树 C/C++
    题目传送门:105.从前序与中序遍历序列构造二叉树-力扣(LeetCode)https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/每次在中序遍历序列片段中找到前序遍历序列队首,这是该层的根节点该位置左侧是左子树,右侧是右子树再......
  • C++面试题整理 1
    1.new和malloc什么区别?new和malloc都用于在堆上分配内存,new是c++中的关键字,分配内存后还会调用构造函数2.std中unorded_map,map,multimap有什么区别?unorderd_map中元素不按键值排序,底层数据结构是哈希表,相对map查询速度快,内存开销大map中元素按键值排序,底层数据结构是红黑......
  • Python文件操作:文件的读取和写入(文本文件、二进制文件)①
    文章目录1.文件操作基础1.1打开文件1.2关闭文件2.文本文件操作2.1读取文本文件2.1.1逐行读取2.1.2读取所有内容2.1.3读取所有行2.2写入文本文件2.2.1写入内容2.2.2追加内容3.二进制文件操作3.1读取二进制文件3.2写入二进制文件4.综合示例4.1示例描......
  • cloud studio配置C++环境
    cloudstudio腾讯推出的云IDE,里面有很多现成的语言环境,这里讲一下C++的环境配置1.选择C++环境模板创建就可以了2.可以直接run或者g++编译3.安装插件第一个C++插件需要自己离线下载上传安装上去,在cloudstudio的插件商店里面搜索不到自行搜索怎么下载离线插件4task和laun......
  • 使用 Visual Studio Code 配置 C/C++ 开发环境
    VisualStudioCode(简称VSCode)是一款非常流行的代码编辑器,提供了丰富的扩展和配置支持,使其成为进行C/C++开发的一款理想工具。本文将详细介绍如何在VSCode中配置C/C++开发环境,涵盖安装必要的工具和插件、编写简单的C/C++程序、配置调试环境等内容。更多内容一、安装......
  • 掌握 C++17:结构化绑定与拷贝消除的妙用
    C++17特性示例1.结构化绑定(StructuredBinding)结构化绑定允许你用一个对象的元素或成员同时实例化多个实体。结构化绑定允许你在声明变量的同时解构一个复合类型的数据结构(如结构体,std::tuple,std::pair,或者std::array)。这样可以方便地获取多个值,而不需要显式地调用std::......
  • C++知识点:size_t, a.at(i), reverse函数
    1.size_t`size_t`是一种在C/C++编程中非常常用的数据类型,它定义在`<stddef.h>`或者`<cstdlib>`等头文件中,通常用来表示**大小**或**长度**。###关键特性:1.**无符号类型**:`size_t`是无符号整数类型,表示它只能存储非负整数。因此,它不会用于存储负值,这使得它非常适合表示诸如......
  • C++ 指针
    声明int*ipl,*ip2;//ipl和ip2都是指向int型对象的指针doubledp,*dp2;//dp2是指向double型对象的指针,dp是double型对象因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。指针值指针的值(即地址)应属下列4种状态之一:指向一个对象。指向紧邻对象所占空......
  • Mybatis读取和存储json类型的数据
    目录一、测试使用JSONObject来获取json二、设置@TableName的autoResultMap为true,@TableField的typeHandler为JacksonTypeHandler.class三、设置xml当中的resultMap四、JacksonTypeHandler讲解五、新增假如是JSONObject异常问题六、遇到转义的问题不管数据库当中是以json还是longte......
  • C++ 声明和定义
    变量声明规定了变量的类型和名字,在这一点上定义与之相同。但是除此之外,定义还申请存储空间,也可能会为变量赋一个初始值。如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量:externinti;//声明i而非定义iintj;//声明并定义了任何包......