C++实现字符串格式化(StringFormat) 闲来⽆事,随⼿写⼀个 String Format。
长久以来都想实现⼀个 String Format,直到现在才有了应⽤环境。前段时间在百度上没有到合意的库,⼏乎都是 snprintf 套了⼀层,格式化字符串依旧还是 %d,%x,%s ⼀股发霉的味道,⽽到使⽤⽅便的库⼜太庞⼤,有⼏⼗个源⽂件,上千⾏源码。我只想要⼀个使⽤⽅便,⼩巧,性能凑合的 Format 函数⽽已。尝试⾃⼰实现了⼀个,出乎意料的顺利。 vs2015编译执⾏得出结果(分别在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 快⼏⼗倍。