#c #fmt
#c #fmt
Вопрос:
Я использую библиотеку {fmt}
C . Я написал много fmt::formatter
специализаций для своих собственных типов. Большинство из них не принимают параметров форматирования, поэтому каждый класс имеет шаблонную реализацию parse(format_parse_context)
:
constexpr auto parse(format_parse_contextamp; ctx)
{
auto it = ctx.begin(), end = ctx.end();
if (it != end amp;amp; *it != '}')
throw format_error("invalid format");
return it;
}
Я надеялся, что fmt::formatter
у этого есть реализация по умолчанию parse
, которая не принимает никаких параметров, но это не так. Есть ли какой-либо ярлык для этого? Что-то вроде fmt::optionless_formatter
класса?
Ответ №1:
Реализация parse
может быть намного проще:
constexpr auto parse(format_parse_contextamp; ctx) { return ctx.begin(); }
Вы также можете повторно использовать существующие formatter
специализации с помощью наследования или композиции.
Комментарии:
1. Я согласен, что это будет принимать пустые спецификации формата, но также с радостью будет использовать любой произвольный текст и ничего не делать. В этом случае я бы предпочел сообщить об ошибке.
2. Это выдаст вам сообщение об ошибке, вам не нужно выполнять проверку самостоятельно: godbolt.org/z/rd6saj
3. Отлично. Я предполагаю
fmltlib
, что какая-то проверка ошибок на возвращаемое значениеparse()
. Спасибо!