Template-Metaprogrammierung: (Merkmal für?) Zerlegen eines bestimmten Templates in die Typen T <T2, T3 N, T4,…>

Ich versuche, den zugrunde liegenden Vorlagentyp abzuleitenT von einem TypE = T<T2,T3>. Dies würde es beispielsweise ermöglichen, eine Vorlagenfunktion pair_maker (const E & a) zu erstellen, die mit einem von mehreren ähnlichen Containertypen verwendet werden kann. Grober Meta-Code:

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>

würde den Typ transformierenvector<int> invector<pair(int,std::string)> oderwhatever<T1> inwhatever<pair(T1,std::string)>.

Ein weiteres ähnliches Beispiel für die Typzerlegung ist für std :: array (oder ähnliche Container), in denen ich das herausfinden möchteContainer Geben Sie ein, um ein neues ähnliches Array zu erstellen. Zum Beispiel für diese Art von Funktionen (das ist jetzt der aktuelle Arbeitscode)

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

Dies funktioniert gut, aber ich bin danach bestrebt, die explizite Verwendung von 'std :: array' automatisch zu machen.

Für std :: array gibt es die Eigenschaft tuple_size, die hilft, und eine ähnliche Funktion kann verwendet werden, um die zu findentype für ein zweites Argument, aber wieder kann ich mir nichts vorstellen, um den Containertyp zu finden.

Zusammenfassend lässt sich sagen, welche Art von Maschinen (falls vorhanden) für solche Fälle verwendet werden kann. Inwieweit können Vorlagenargumente, Vorlagenvorlagenargumente, eine beliebige Anzahl von Argumenten und Nichtvorlagenargumente unbekannten Typs gemischt verarbeitet werden.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage