Как добавить собственный спецификатор формата в fmt - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь заменить функцию безопасного формата пользовательского типа вызовами fmt. Текущая реализация поддерживает спецификатор 'u', который печатает значения как беззнаковые, независимо от их знака. Я хотел бы добавить ту же функциональность к моим вызовам в fmt :: vformat.

Я попытался просто заменить 'd' на экземпляры 'u', но это не будет правильно выводить отрицательные значения.

Мне нужно знать, как вставить пользовательский целочисленный спецификатор, который вызывает текущую реализацию со значением, приведенным к целому числу без знака.

1 Ответ

1 голос
/ 29 октября 2019

Нельзя добавить новый спецификатор формата во встроенный форматтер, поэтому я рекомендую просто преобразовать в unsigned:

int answer = -42;
fmt::print("{}", unsigned(answer)); // prints 4294967254

https://godbolt.org/z/5bdtgA

...