Итак, у меня есть код, написанный до C++11, который анализирует строку на основе аргументов шаблона. Вместо того, чтобы иметь одно определение для каждого количества аргументов, я хотел бы использовать вариадные шаблоны, но я не могу обернуть голову вокруг того, как правильно инициализировать кортеж. Смотрите этот упрощенный код того, что я хочу, это для частного случая 2 аргументов:
template <typename Arg1, typename Arg2>
struct parser
{
static tuple<Arg1, Arg2> parse(const string& str)
{
Arg1 arg1;
Arg2 arg2;
// do the parsing with for example stringstream
return tuple<Arg1, Arg2>(arg1, arg2);
}
};
У меня проблема с помещением аргументов в кортеж в вариадном падеже. Я могу построить держатель возвращаемого значения с помощью:
tuple<Args...> retVal;
, но я не знаю, есть ли способ перебрать аргументы и поместить их в кортеж. Я видел некоторую рекурсивную магию, чтобы получить, например, функции printf
, но я не знаю, может ли она применяться к этому случаю.