闲来无事,随手写一个 String Format。
长久以来都想实现一个 String Format,直到现在才有了应用环境。前段时间在百度上没有找到合意的库,几乎都是 snprintf 套了一层,格式化字符串依旧还是 %d,%x,%s
一股发霉的味道,而找到使用方便的库又太庞大,有几十个源文件,上千行源码。我只想要一个使用方便,小巧,性能凑合的 Format 函数而已。尝试自己实现了一个,出乎意料的顺利。
vs2015编译执行得出结果(分别在1秒内记录执行的次数)
Test 1:一个字符串参数
snprintf(buffer, 40960, "%s", "format, format, format, format, format");
-
Format("{0}, {0}, {0}, {0}, {0}", "format");
结果:6007517 4276270
Test 2:多个相同字符串参数
snprintf(buffer, 40960, "%s, %s, %s", "format", "format", "format");
-
Format("{0}, {0}, {0}", "format");
结果:3995225 6990799
Test 3:整数
snprintf(buffer, 40960, "%d, %d, %d", 999999, 999999, 999999);
-
Format("{0}, {0}, {0}", 999999);
结果:2713117 5522970
Test 4:浮点数
snprintf(buffer, 40960, "%lf, %lf, %lf", 999999.0, 999999.0, 999999.0);
-
Format("{0}, {0}, {0}", 999999.0);
结果:923397 706681
特点
- 代码简短,仅40行。
- 类型安全
- 支持可变参数
- 参数可乱序传入
- 格式化字符串无需指定参数类型
- 格式化字符串可以指定无效参数
- 可重载
ToString
扩展自定义类型 - 性能相比 vs2015 的
snprintf
还算不错(比 vs2013 的snprintf
快了近20倍),比stringstream
快几十倍。
github url:https://github.com/mmc1993/sformat