C++字符串格式化库

总的来说,C++可使用的字符串格式化库是非常少,基本可选用的如sprintf系列,boost.format等,诚然stringstream也可以,但是和其他库有明显使用上的区别,不是很方便。

自实现的格式化库

曾经因为项目日志打印问题,比如申请多少缓冲区问题,为了防止越界等问题,多方考虑自己实现了一个格式化库

详见 跨平台的STL字符串格式化库(码云)

其中GNU的版本采用了特别底层的函数实现,基本就屏蔽了支持格式的问题。Win32上实现基本都是提前探测,自己申请内存,然后sprintf,在GNU下采用了 vasprintf 此接口强大之处在于,直接返回申请并格式化后的字符串,且需要自己释放内存。这种情况下,性能应该是最高的了,毕竟是系统申请的内存并格式化后的,减少了很多的内存拷贝等。大家在某些自己开发的工程中,如果有类似的需求,可以直接调这些底层接口实现,对性能提升帮助很大。

第三方库fmt

最近又通过之前介绍的 plog日志库 库发现了一个新的格式化库,项目详见

https://github.com/fmtlib/fmt

使用其他特别方便,特别举例说明

//按顺序实现参数
std::string str = fmt::format("data: {}{}{}", "abra", 4, 5);
//指定参数顺序
str = fmt::format("data: {0}{1}{0}", "abra", "cad");
//标签化参数
str = fmt::format("last {DATA} size {SIZE}",
fmt::arg("DATA", str), fmt::arg("DATA", str.size()))

第一眼看上去都会怀疑这是C++么,要不是看见std::string,真以为是其他什么语言,这种风格和传统的C/C++的区别很大,很类似于C#和Java等其他语言的方式。当然该库还不止这一点功能,大家可参考主页文档深挖。

另外,在其他网页看到说这个库的性能非常高,直逼C,我没测试不敢保证。

最近的文章

GB28181云台控制

最近完成了GB28181的云台控制功能,记录下相关代码。 参考要实现GB28181的云台控制,基本不用参考其他文档了,直接查看标准文档即可,当然COPY别人现成代码也是很爽的,不过百度相关代码其实也不多,是不是搞这块的人不多呢。这里主要要说的是,云台控制就是发送了消息,相机会一直执行,直到其他命令或 …

技术 继续阅读
更早的文章

采用正则解析协议

大家都知道开发网络协议的C++一般是很少的,比如HTTP、RTSP、SIP等就很少,如果有特殊需求基本上已经没有什么可以使用的库了,所以C++程序员一般热衷于造轮子。记得之前做异步HTTP的时候,基本都是ASIO做网络I/O,数据自己来做解析,各种的匹配,逐条处理等等。 比如在解析HTTP文本的时候 …

技术 继续阅读