C ++ fmt库,仅使用格式说明符格式化单个参数

时间:2019-10-29 00:40:42

标签: c++ formatting fmt

使用C ++ fmt库,并给出一个简单的格式说明符,有没有办法使用它格式化单个参数?

Models

虽然上述实现实现了我想要的功能,但我希望采用一种不需要我在该过程中构建新的临时字符串的方式。

1 个答案:

答案 0 :(得分:2)

您可以直接使用formatter<T>来完成此操作:


template <typename T>
std::string magic_format(fmt::string_view spec, const T& arg) {
  fmt::formatter<T> f;
  fmt::format_parse_context parse_ctx(spec);
  f.parse(parse_ctx);
  std::string str;
  auto out = std::back_inserter(str);
  using context = fmt::format_context_t<decltype(out), char>;
  auto args = fmt::make_format_args<context>(arg);
  context format_ctx(out, args, {});
  f.format(arg, format_ctx);
  return str;
}

Godbolt:https://godbolt.org/z/Ras_QI