Вариадные шаблоны zip для C++

Вот простая двойка -функция zip контейнера в C++:

template <typename A, typename B>
std::list<std::pair<A, B> > simple_zip(const std::list<A> & lhs,
                                       const std::list<B> & rhs)
{
  std::list<std::pair<A, B> >  result;
  for (std::pair<typename std::list<A>::const_iterator,
                 typename std::list<B>::const_iterator> iter
       =
       std::pair<typename std::list<A>::const_iterator,
                 typename std::list<B>::const_iterator>(lhs.cbegin(),
                                                        rhs.cbegin());
       iter.first != lhs.end() && iter.second != rhs.end();
       ++iter.first, ++iter.second)
  {
    result.push_back( std::pair<A, B>(*iter.first, *iter.second) );
  }
  return result;
}

Как мне расширить это на произвольное количество контейнеров с вариативными шаблонами?

Я хотел бы general_zipпринимать tupleиз listс (каждый список может содержать другой тип )и возвращать listиз tupleс.

8
задан log0 23 September 2012 в 14:50
поделиться