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
文件
遇到的几个问题
-
要生成 格式化的 JSON 需要使用
PrettyWriter
-
小数精度问题
例如,保存两位:
writer.SetMaxDecimalPlaces(2);