Форматирование 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 шт):

Автор решения: banana_cat

Можно замутить через 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");
}
→ Ссылка