项目记录 : VS命令参考解析 + JSON文件生成

VS命令参考解析以及JSON文件生成

由于项目中的程序是读取JSON文件的

为了生成JSON文件需要很多自定义的参数需要自己生成一些内容

所以设计到两方面.一方面的参数的读取.另一方面是JSON文件的生成

命令行参数解析

  • 利用命令行参数传参是一个常出现的传参方法。笔者在之前的开发过程中,总是用自己写的简易版本来进行参数解析,非常粗鲁并且繁琐且容易出错。恰好最近要实现一个功能,其中第一步就需要进行命令行参数的解析,这次去github搜索了一下,找到了一个非常轻量级并且经笔者测试可以满足需求的一个开源项目。本文主要介绍这个项目的使用。

cmdline介绍

  • 这个项目的是基于C++实现,用了大量的模板来解决需求,所以写出来的代码非常的优雅美观。贴出cmdline项目的开源地址:cmdline

cmdline使用

  • 首先需要clone下来这个项目,在自己开发的项目里面包含cmdline项目中的cmdline.h这个头文件。 根据项目中的readme说明就可以使用这个开源库了。

VS下的cmdline

  • 由于笔者的开发环境为Windows+VS,在包含头文件进来之后发现编译并不能顺利通过,提示缺少头文件cxxabi.h,而这个头文件是MSVC中不包含的。 注释掉头文件cxxabi.h的包含之后,发现只有一个错误。函数具体如下所示

    static inline std::string demangle(const std::string &name)
    {
      int status=0;
      char *p=abi::__cxa_demangle(name.c_str(), 0, 0, &status);//用到cxxabi.h中的函数
      std::string ret(p);
      free(p);
      return ret;
    }
    
  • 这个是因为MSVC和其他编译器的差别造成,修改方法如下

    static inline std::string demangle(const std::string &name)
    {
        #ifdef _MSC_VER
        // 为MSVC编译器时直接返回name
        return name; 
        #elif defined(__GNUC__) 
        // 为gcc编译器时还调用原来的代码
        int status=0;
        char *p=abi::__cxa_demangle(name.c_str(), 0, 0, &status);
        std::string ret(p);
        free(p);
        return ret;
        #else
        // 其他没有cmdline.h的编译器需要自己实现这个方法
        #endif
    }
    
  • 修改之后就可以愉快地使用了

  • 使用参考 汉语版本可以参考【C++】cmdline —— 轻量级的C++命令行解析库

JSON文件生成

  • 前不久在Android端使用过 谷歌的 GSON 解析 JSON文件
  • 现在我们需要自定义生成一个JSON文件
  • 使用的是 rapidjson 库.

RapidJSON 介绍

  • RapidJSON 是一个解析和生成 JSON 的 C++ 库。
  • 无需编译,包含头文件即可使用。
  • 参考纹理 RapidJSON的基本使用 实现了简单的功能
  • 并输出了 JSON 文件

遇到的几个问题

  1. 要生成 格式化的 JSON 需要使用 PrettyWriter

  2. 小数精度问题

    例如,保存两位: writer.SetMaxDecimalPlaces(2);

参考文献

VS中命令行参数解析–cmdline

【C++】cmdline —— 轻量级的C++命令行解析库

RapidJSON的基本使用

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值