如何使用libfmt多次输出内容到内存缓冲区并转换为字符串?
使用libfmt多次格式化内容到内存缓冲区并转为字符串
其实你提到的fmt::memory_buffer就是你要找的内存缓冲区类型,只是用法和你预想的略有不同——它本身没有print成员函数,但可以配合fmt::print的重载来实现多次追加内容的需求,完全符合你的场景。
直接给你看示例代码:
#include <fmt/core.h> #include <fmt/format.h> #include <string> int main() { // 创建内存缓冲区对象 fmt::memory_buffer buf; // 多次往缓冲区写入格式化内容 fmt::print(buf, "Hello, {}!\n", "Libfmt"); fmt::print(buf, "Current count: {}\n", 1); fmt::print(buf, "Precision example: {:.3f}\n", 2.71828); // 将缓冲区内容转换为std::string std::string final_str = fmt::to_string(buf); // 输出验证(也可以直接使用final_str做其他操作) fmt::print("{}", final_str); return 0; }
关键说明:
fmt::memory_buffer是libfmt内置的动态内存缓冲区,会自动管理内存扩容,不需要手动分配空间。- 虽然没有
buf.print(...)这种写法,但fmt::print提供了接受fmt::memory_buffer&作为第一个参数的重载,作用就是把格式化后的内容追加到缓冲区里,完美替代你预想的成员函数调用。 - 最后用
fmt::to_string把缓冲区的二进制内容转换成标准std::string,这个函数会自动处理字符编码(默认是UTF-8),无需手动拷贝字节。 - 如果需要复用缓冲区,调用
buf.clear()就能清空已有内容,重新写入新的格式化数据。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

