metaprogramowanie szablonów: (cecha?) rozdzielenie określonego szablonu na typy T <T2, T3 N, T4,…>

Próbuję wydedukować typ szablonuT z typuE = T<T2,T3>. Umożliwi to na przykład stworzenie funkcji szablonu pair_maker (const E & a), która może być używana z jednym z kilku podobnych typów kontenerów. Szorstki kod meta:

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>

przekształciłby typvector<int> wvector<pair(int,std::string)> lubwhatever<T1> wwhatever<pair(T1,std::string)>.

Innym podobnym przykładem rozcięcia typu jest std :: array (lub podobne pojemniki), w którym lubię rozróżniaćpojemnik wpisz, aby utworzyć nową podobną tablicę. Na przykład dla tego rodzaju funkcji (jest to obecnie działający kod)

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>{} ;
}

Działa to dobrze, ale to, czego oczekuję, to wyraźne użycie automatu „std :: array”.

Dla std :: array istnieje cecha tuple_size, która pomaga, a podobna rzecz może być użyta do znalezieniatype dla dowolnego drugiego argumentu, ale znowu nie mogę wymyślić nic do znalezienia typu kontenera.

Podsumowując: jaki rodzaj maszyn (jeśli istnieje) może być używany w takich przypadkach. Do jakiego stopnia możliwe jest radzenie sobie z mieszankami argumentów szablonów, argumentów szablonu-szablonu, dowolnej liczby argumentów i argumentów innych niż szablonowe nieznanych typów.

questionAnswers(3)

yourAnswerToTheQuestion