Этот код 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);
}
не может скомпилироваться с огромным шаблоном. Есть ли способ это исправить?
@user4581301 user4581301 Спасибо. Я бы не назвал векторное форматирование fmt навязанным пользователю. Как вы заметили, вы всегда можете выбрать свои собственные правила, но полезно иметь что-то работающее «из коробки», а не изобретать велосипед в миллиардный раз.
Я с вами в этом. Что-то почти всегда лучше, чем ничего, но решившись на что-то, как правило, увязнет в политике. Хотя похоже, что некоторые люди придумали схему, которая имеет достаточно широкую поддержку, чтобы, по крайней мере, ее можно было рассмотреть для включения.
Дубликаты: Как распечатать содержимое вектора и почему std::println(vector) не компилируется
Я хотел бы отметить, что эта функция вдохновлена (скопирована)fmt библиотекой, и это здорово (вот почему она систематически становится частью стандарта). Удобнее просто использовать эту библиотеку вместо ожидания стандарта, и ее поддержка компиляторами догонит библиотеку fmt. См. соответствующую функцию fmt.
@MarekR Я надеялся, что стандарт C++ догонит fmt, но он движется ледниковыми темпами. конечно, это дело ближайшего будущего.





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