c++ fmt

fmt 是一个文本格式库,可以代替 C 的 stdio 和 C++ iostreams。实现了 C++20 的 std::format 标准。

格式化输出

#include <fmt/core.h>

int main() {
  fmt::print("Hello, world!\n");
  fmt::print("Hello, {}!", "world");
  fmt::print("Hello, {0}, {0}", "world");
}

format函数

fmt::memory_buffer buf;
fmt::format_to(buf, "{}", 42);
fmt::format_to(buf, "{:x}", 42); // 十六进制表示
std::cout << buf.data();

格式字符串

std::string s = fmt::format("The answer is {}.", 42);
// s == "The answer is 42."

保留2位小数

std::string s = fmt::format("The answer is {:.2f}", 1.12345678);
// s == "The answer is 1.12"

使用位置参数

std::string s = fmt::format("I'd rather be {1} than {0}.", "right", "happy");
// s == "I'd rather be happy than right."

使用别名参数

fmt::print("Hello, {name}! The answer is {number}. Goodbye, {name}.",
           fmt::arg("name", "World"), fmt::arg("number", 42));

时间日期格式化

#include <fmt/chrono.h>

int main() {
  using namespace std::literals::chrono_literals;
  fmt::print("Default format: {} {}\n", 42s, 100ms);
  fmt::print("strftime-like format: {:%H:%M:%S}\n", 3h + 15min + 30s);
  std::time_t t = std::time(nullptr);
  fmt::print("The date is {:%Y-%m-%d}.\n", *std::localtime(&t));
}

输出列表

#include <vector>
#include <fmt/ranges.h>

int main() {
  std::vector<int> v = {1, 2, 3};
  fmt::print("{}\n", v);
}

输出到文件

#include <fmt/os.h>

int main() {
  auto out = fmt::output_file("guide.txt");
  out.print("Don't {}", "Panic");
}

输出使用特定颜色

#include <fmt/color.h>

int main() {
  fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold,
             "Hello, {}!\n", "world");
  fmt::print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) |
             fmt::emphasis::underline, "Hello, {}!\n", "мир");
  fmt::print(fg(fmt::color::steel_blue) | fmt::emphasis::italic,
             "Hello, {}!\n", "世界");
  fmt::print(fmt::color::red, "hello {}\n", "world");
  fmt::print(fmt::rgb(10, 50, 63), "hello {}\n", "world");
}

error 输出

fmt::memory_buffer error_buff;
fmt::format_error_code(error_buff, 42, "test");
std::cout << error_buff.data() << std::endl;
// test: error 42
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值