总的来说,C++可使用的字符串格式化库是非常少,基本可选用的如sprintf系列,boost.format等,诚然stringstream也可以,但是和其他库有明显使用上的区别,不是很方便。
自实现的格式化库
曾经因为项目日志打印问题,比如申请多少缓冲区问题,为了防止越界等问题,多方考虑自己实现了一个格式化库
其中GNU的版本采用了特别底层的函数实现,基本就屏蔽了支持格式的问题。Win32上实现基本都是提前探测,自己申请内存,然后sprintf
,在GNU下采用了 vasprintf
此接口强大之处在于,直接返回申请并格式化后的字符串,且需要自己释放内存。这种情况下,性能应该是最高的了,毕竟是系统申请的内存并格式化后的,减少了很多的内存拷贝等。大家在某些自己开发的工程中,如果有类似的需求,可以直接调这些底层接口实现,对性能提升帮助很大。
第三方库fmt
最近又通过之前介绍的 plog日志库 库发现了一个新的格式化库,项目详见
使用其他特别方便,特别举例说明
//按顺序实现参数 |
第一眼看上去都会怀疑这是C++么,要不是看见std::string,真以为是其他什么语言,这种风格和传统的C/C++的区别很大,很类似于C#和Java等其他语言的方式。当然该库还不止这一点功能,大家可参考主页文档深挖。
另外,在其他网页看到说这个库的性能非常高,直逼C,我没测试不敢保证。