std::format
не поддерживает operator<<
, вам нужно указать специализацию formatter
для вашего типа (Point
). Самый простой способ сделать это - повторно использовать один из существующих форматеров, например, std::formatter<std::string>
:
template <>
struct std::formatter<Point> : std::formatter<std::string> {
auto format(Point p, format_context& ctx) {
return formatter<string>::format(
std::format("[{}, {}]", p.x, p.y), ctx);
}
};
. Это даст вам все спецификации формата, поддерживаемые std::string
из коробки. Вот пример форматирования Point
с выравниванием по центру, дополненным '~' до 10 символов:
auto s = std::format("{:~^10}", Point{1, 2});
// s == "~~[1, 2]~~"
, чего нетривиально достичь с помощью iostreams.