метапрограммирование шаблонов: (черта?) разбиение указанного шаблона на типы T <T2, T3 N, T4,…>

Я пытаюсь определить базовый тип шаблона.T из типаE = T<T2,T3>, Это, например, позволило бы создать шаблонную функцию pair_maker (const E & amp; a), которую можно использовать с одним из нескольких похожих типов контейнеров. Грубый метакод:

template <typename T>
auto pairmaker(const E & a) -> PairContents<E,std::string>::type {
    ContainerPairMaker<E,std::string>::type output;
    ... some code ...
    return output;
}

PairContents<E,std::string>

преобразовал бы типvector<int> вvector<pair(int,std::string)> или жеwhatever<T1> вwhatever<pair(T1,std::string)>.

Другой подобный пример разбора типов - для std :: array (или аналогичных контейнеров), где я хотел бы выяснитьcontainer введите новый аналогичный массив. Например, для такого рода функций (сейчас это актуальный рабочий код)

template <typename T > 
auto make_some3(const T & a) 
           -> std::array<typename T::value_type,10*std::tuple_size<T>::value>{   
   return std::array<typename T::value_type,10*std::tuple_size<T>::value>{} ;
}

Это прекрасно работает, но я хочу сделать то, чтобы явно использовать «std :: array»; автоматический.

Для std :: array есть признак tuple_size, который помогает, и аналогичная вещь может быть использована для поискаtype для любого второго аргумента, но опять же я не могу думать ни о чем, чтобы найти тип контейнера.

Подводя итог: какое оборудование (если есть) можно использовать для подобных случаев. В какой степени возможно иметь дело со смесью аргументов шаблона, аргументов шаблона-шаблона, любого количества аргументов и не шаблонных аргументов неизвестных типов.

Ответы на вопрос(3)

Ваш ответ на вопрос