построить кортеж с использованием вариадных шаблонов

Итак, у меня есть код, написанный до 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, но я не знаю, может ли она применяться к этому случаю.

6
задан Melebius 30 January 2017 в 14:38
поделиться