Должен ли std::print иметь возможность печатать std::vector?

Этот код C++ с использованием библиотеки fmt работает как положено:

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

int main() {
  std::vector<int> v{4, 2, 7};
  fmt::println("{}", v);
}

Моя попытка использовать стандартный заголовок print с g++-14:

#include <print>
#include <vector>

void test() {
  std::vector<int> v{4, 2, 7};
  std::println("{}", v);
}

не может скомпилироваться с огромным шаблоном. Есть ли способ это исправить?

Поскольку не существует универсального или даже широко распространенного стандартного форматирования для vector или другого контейнера, стандартные процедуры вывода не пытаются его навязать. Боюсь, вам придется написать свои собственные правила.

user4581301 08.05.2024 00:22

@user4581301 user4581301 Спасибо. Я бы не назвал векторное форматирование fmt навязанным пользователю. Как вы заметили, вы всегда можете выбрать свои собственные правила, но полезно иметь что-то работающее «из коробки», а не изобретать велосипед в миллиардный раз.

Paul Jurczak 08.05.2024 00:29

Я с вами в этом. Что-то почти всегда лучше, чем ничего, но решившись на что-то, как правило, увязнет в политике. Хотя похоже, что некоторые люди придумали схему, которая имеет достаточно широкую поддержку, чтобы, по крайней мере, ее можно было рассмотреть для включения.

user4581301 08.05.2024 01:31
Этот ответ в обмане говорит, что std::print может быть еще не широко доступен.
user12002570 08.05.2024 04:49

Я хотел бы отметить, что эта функция вдохновлена ​​(скопирована)fmt библиотекой, и это здорово (вот почему она систематически становится частью стандарта). Удобнее просто использовать эту библиотеку вместо ожидания стандарта, и ее поддержка компиляторами догонит библиотеку fmt. См. соответствующую функцию fmt.

Marek R 08.05.2024 17:35

@MarekR Я надеялся, что стандарт C++ догонит fmt, но он движется ледниковыми темпами. конечно, это дело ближайшего будущего.

Paul Jurczak 11.05.2024 04:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
7
328
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша стандартная библиотека должна поддерживать P2585 , чтобы можно было использовать std::format на std::vector, и согласно странице состояния реализации libstdc++ поддержка P2585 пока не поддерживается, поэтому вам придется дождаться следующей версии. .

Другие вопросы по теме