fmtlib: ярлык для пользовательских типов без параметров синтаксического анализа?

#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() . Спасибо!