Форматирование std::string или QString в C++
Нужна помощь с обработкой аргументами std::string строки.
На вход поступает string или QString переменная с сырыми модификаторами внутри, к примеру: std::string s = "I have %d apples, my mother have %f apples"
Вместе с строкой поступает массив аргументов, которые должны быть в нее вставлены, к примеру:
long l[2] = {1,0};
Количество аргументов в строке может быть разное, значения всех аргументов и их количество нам известно.
Каким способом можно преобразовать string строку, зная заранее количество аргументов и их значения? Обработка должна идти так, как будто это работает snprintf, только в него мы передаем все время разное кол-во аргументов и строку в виде переменной string
По примеру выше, должно быть на выходе std::string s = "I have 1 apples, my mother have 0 apples"
Ответы (1 шт):
Можно замутить через Parameter packs
Пример:
QString strArgs(const QString &str)
{
return str;
}
template<typename T, typename... Targs>
QString strArgs(const QString &str, T value, Targs... args)
{
QString returnVal = str.arg(value);
return strArgs(returnVal, args...);
}
int main(int argc, char *argv[])
{
QString str = "%1, %2, %3, %4";
qDebug()<<strArgs(str, 1, 2, 3,4);;
qDebug()<<strArgs(str, "w", 1, 2,"k");
}