C++实现字符串格式化(String Format)

闲来无事,随手写一个 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 扩展自定义类型
  • 性能相比 vs2015snprintf 还算不错(比 vs2013snprintf 快了近20倍),比 stringstream 快几十倍。

github url:https://github.com/mmc1993/sformat

你可能感兴趣的:(C++实现字符串格式化(String Format))