std::format
От: Videoman Россия https://hts.tv/
Дата: 24.10.22 12:16
Оценка:
Хотелось бы получить совет от коллег кто активно использует сабж и, самое главное, пишет форматеры для собственных типов.

Так уж сложилось, что у меня в проектах, года с 2008-го активно используется свой форматер строк, который я давно писал сам, т.к. на тот момент ничего готового и быстрого не удалось найти. По счастливому совпадению, я выбрал точно такой же синтаксис форматирования, содрав его с Pyton-а. У меня правда в качестве своих форматеров используются функции, что на практике оказалось более удобным чем текущий подход в std. В связи с тем, что со времени выхода стандарта С++20 прошло уже 2 года, я думаю что с выходом С++23 реализация std::format уже должна появиться во всех актуальных компиляторах . С связи с чем, я решил выпилить свою реализацию и заменить на стандартную, пока основанную на библиотеке fmt.

Проблема:
Все форматеры у меня были шаблонными сразу для всех типов строк. С этим я вроде разобрался. "Рыба" выглядит примерно так:
template<typename type_t  typename char_t>
class std::formatter<type_t, char_t>
{
public:

    constexpr auto parse(basic_format_parse_context<char_t>& ctx) -> decltype(ctx.begin())
    {
    // do parsing... 

        return ctx.begin();
    }

    template<typename it_t>
    auto format(const type_t_t& data, basic_format_context<it_t, char_t>& ctx) const -> decltype(ctx.out())
    {
    // do formatting... 

    format_to(ctx.out(), "Some format"); // error for all character types except 'char'

    // do formatting... 

        return ctx.out();
    }
};

Но как оказалось, при форматировании, контекст не поддерживает вывод в него констант с типом отличным от типа char_t. Тут сразу появляется поле для фантазий на тему как такое лучше и эффективнее всего делать. В общем нужны советы и примеры тех кто с этим уже сталкивался или понял что предлагает стандартная библиотека на это счёт (или fmt).

P.S. Очень прошу воздержаться от вкусовщины, советов типа: std::format не нужен, мне не нравится синтаксис и т.д.
Re: std::format
От: vopl Россия  
Дата: 25.10.22 08:14
Оценка: 2 (1)
Здравствуйте, Videoman, Вы писали:

V>В общем нужны советы и примеры тех кто с этим уже сталкивался или понял что предлагает стандартная библиотека на это счёт (или fmt).


Сам я не спец и с такой штукой, к сожалению, не рабтал, но, видел что ее крайне интенсивно используют господа яндексы в своем userver. Наверняка они там решили много проблем и есть вероятность что сабжевая проблема там тоже как то решена..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.