Каков идеальный способ настройки разделителей и скобок для форматирования диапазонов?C++

Программы на C++. Форум разработчиков
Anonymous
Каков идеальный способ настройки разделителей и скобок для форматирования диапазонов?

Сообщение Anonymous »

В C++23 мы можем использовать std::print напрямую для печати диапазонов благодаря P2286:

Код: Выделить всё

std::vector v = {10, 2, 42, 15};
std::println("{::02X}", v); /* 02X is the format spec for elements of range */
что дает:

Код: Выделить всё

[0A, 02, 2A, 0F]
Однако, если я хочу настроить скобки и разделитель на «|» и «-» соответственно:

Код: Выделить всё

|0A-02-2A-0F|
Как мне это сделать? Я знаю, что std::range_formatter предоставляет два пользовательских API: set_brackets() и set_separator(), поэтому интуитивно понятный способ, похоже, специализирует std::formatter:

Код: Выделить всё

template
struct std::formatter : std::range_formatter {
constexpr formatter() {
this->set_brackets("|", "|");
this->set_separator("-");
}
};
что дает ожидаемые результаты.
Но мне интересно, есть ли для этого лучшая практика, например, настройка скобок и разделителей напрямую с использованием определенного форматирования строки (которые стандарт в настоящее время, похоже, не поддерживает).
Каков рекомендуемый способ сделать это в текущем стандарте? Есть ли проблемы с решением вопроса?

Подробнее здесь: https://stackoverflow.com/questions/792 ... matting-ra

Вернуться в «C++»