Подтвержденная строка формата printf

Существует ли библиотека C/C++, которая может форматировать аналогично printfстроке формата, но которая проверяет, удовлетворяет ли эта строка формата определенным ограничениям и соответствует аргументам?

Причина в том, что программа должна брать строку формата из пользовательского ввода в качестве шаблона для серии имен файлов с одной переменной целочисленного индекса. Таким образом, пользователь может предоставить image%d.pngили image%.6d.png, но hack_%d_%sне будет принят.

Ответы (1)

Самый непосредственный ответ на ваш вопрос, я считаю, tinyformat , который предназначен только для обеспечения printf()замены типов и используется. Однако я бы не рекомендовал вам выбирать именно его.

Вам, вероятно, лучше подойдет fmt , который имеет более широкий охват, но делает больше, получил больше развития и более широко используется (есть также более старый FastFormat ). Как вы увидите по ссылкам, они вас точно не подведут printf().

Если вам нужна самая простая вещь, которую можно сделать своими руками, есть printf()идея безопасной реализации на основе вариативного шаблона от светила C ++ Андрея Александреску из 20120 года - подробности см. В этом ответе StackOverflow.com .


Последнее замечание, выходящее за рамки конкретного сценария OP: с С++ 17 стало возможным выйти даже за рамки всех этих параметров и использовать constexprконстанты строки формата для полной проверки во время компиляции, а не во время выполнения, что было бы здорово (при условии, конечно, что вы заранее знаете свой формат). На данный момент ничего подобного не было выпущено (насколько я знаю).

Как строки формата constexpr помогают OP, который хочет ввести строку формата с клавиатуры?
@IraBaxter: Это не помогает в конкретном случае OP, но помогает в общем случае, представленном заголовком вопроса. Я отредактирую, чтобы уточнить это.