Существует ли библиотека C/C++, которая может форматировать аналогично printf
строке формата, но которая проверяет, удовлетворяет ли эта строка формата определенным ограничениям и соответствует аргументам?
Причина в том, что программа должна брать строку формата из пользовательского ввода в качестве шаблона для серии имен файлов с одной переменной целочисленного индекса. Таким образом, пользователь может предоставить image%d.png
или image%.6d.png
, но hack_%d_%s
не будет принят.
Самый непосредственный ответ на ваш вопрос, я считаю, tinyformat , который предназначен только для обеспечения printf()
замены типов и используется. Однако я бы не рекомендовал вам выбирать именно его.
Вам, вероятно, лучше подойдет fmt , который имеет более широкий охват, но делает больше, получил больше развития и более широко используется (есть также более старый FastFormat ). Как вы увидите по ссылкам, они вас точно не подведут printf()
.
Если вам нужна самая простая вещь, которую можно сделать своими руками, есть printf()
идея безопасной реализации на основе вариативного шаблона от светила C ++ Андрея Александреску из 20120 года - подробности см. В этом ответе StackOverflow.com .
Последнее замечание, выходящее за рамки конкретного сценария OP: с С++ 17 стало возможным выйти даже за рамки всех этих параметров и использовать constexpr
константы строки формата для полной проверки во время компиляции, а не во время выполнения, что было бы здорово (при условии, конечно, что вы заранее знаете свой формат). На данный момент ничего подобного не было выпущено (насколько я знаю).
Ира Бакстер
айнпоклум