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.