Ну, это не вставка, но один из способов сделать это - динамически построить строку формата:
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
int main()
{
int n = 5;
const std::string f("%" +
boost::lexical_cast<std::string>(n * 2) + "." +
boost::lexical_cast<std::string>(n * 2) + "s");
std::string s = (boost::format(f) % "Hello").str();
}
Конечно, если бы вы делали это часто, вы могли бы реорганизовать конструкцию строки формата в функцию.
Вы также можете использовать boost::format()
для генерации строки формата; он короче, но потенциально менее читабелен, особенно для длинных строк формата:
const std::string f = (boost::format("%%%d.%ds") % (n*2) % (n*2)).str();
std::string s = (boost::format(f) % "Hello").str();
(кредит Ферруччо за публикацию второй идеи в комментариях)