Это лучше объяснить на примере:
template <typename T1, typename T2>
struct OnePair
{
using TupleOfArgs = std::tuple<T1, T2>;
using TupleOfPairs = std::tuple<std::pair<T1, T2>>;
};
template <typename T1, typename T2, typename T3, typename T4>
struct TwoPairs
{
using TupleOfArgs = std::tuple<T1, T2, T3, T4>;
using TupleOfPairs = std::tuple<std::pair<T1, T2>, std::pair<T3, T4>>;
};
template <typename... Args>
struct NPairs
{
using TupleOfArgs = std::tuple<Args...>;
// using TupleOfPairs = ???
};
OnePair определяет кортеж с одной парой. TwoPairs определяет кортеж с двумя парами.
Как определить TupleOfPairs в NPairs, чтобы он преобразовывал пакет параметров в std :: tuple пар?
Возможно ли добиться этого с помощью std библиотека? Может быть, с boost :: mpl?
Два ответа, оба великолепны. @chris использует итерационный метод, а @aschepler использует рекурсивное решение. Лично я нашел рекурсивное решение проще для понимания.