Здравствуйте, so5team, Вы писали:
S>И что мешает внести такое предложение? Хотя бы вот сюда: https://stdcpp.ru/proposals/
S>Если людей это заинтересует, то они доведут это до формального предложения комитету.
Теоретически ничего не мешает. Практически, я только неделю как погрузился в std::format и пока изучаю исходники и занят своей работой. Что бы оформить предложение, нужно время. Время появиться, обязательно сделаю, тем более если вы считаете, что это имеет смысл и что это вообще кто-то читает.
Подход с функциями хорош еще и тем, что работают стандартные преобразования. Т.е. можно делать форматеры, которые не обязательно жестко совпадают с типом, а являются, например, базовым классом для подмножества наследников или преобразуются к типу. Короче весь богатый арсенал который доступен при перегрузках функций. При желании, с помощью SFINAE можно и жестко зашить тип. При специализациях классов, мы всё это теряем и приходится сразу обращаться к SFINAE. (кстати, может быть разработчики хотели обратного, кто знает)
S>Меня в таком подходе, например, сильно смущает такой момент: допустим, мы линкуем два объектника. В одном используются вызовы std::print (которые трансформируются в std::print_as(..., std::format_as<std::format_traits>, ...)), а в другом вызовы std::print_as(.., std::format_as<my_traits>, ...). Поскольку std::print_as шаблонная, то компилятор сгенерирует и std::print_as для std::format_traits, и для my_traits. Т.е. мы получим две копии практически одного и того же кода. На ровном месте, по сути.
Ну это стандартные издержки шаблонов, можно с легкостью нагенерировать кучу машинного кода. Зато быстро
! Нужно будет подумать как это оптимизировать. Например, поскольку аргумент формальный, его можно передавать как параметр шаблона и только в конце инстанцировать при передаче в сам formatter. Такое компилятору будет проще оптимизировать?