metaprogramação de modelos: (característica para?) dissecando um modelo especificado nos tipos T <T2, T3 N, T4,…>

Eu estou tentando deduzir o tipo de modelo subjacenteT de um tipoE = T<T2,T3>. Isto permitiria, por exemplo, fazer uma função de template par_maker (const E & a) que pode ser usada com um dos vários tipos similares de containers. Meta código:

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>

transformaria o tipovector<int> para dentrovector<pair(int,std::string)> ouwhatever<T1> para dentrowhatever<pair(T1,std::string)>.

Outro exemplo semelhante de dissecação de tipo é para std :: array (ou containers similares) onde eu gosto de descobrirrecipiente digite para criar um novo array similar. Por exemplo, para este tipo de funções (este é o código de trabalho atual agora)

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

Isso funciona bem, mas o que eu estou procurando é tornar o uso explícito de 'std :: array' automático.

Para o std :: array, há o traço tuple_size que ajuda, e uma coisa semelhante pode ser usada para encontrar otype para qualquer segundo argumento, mas novamente não consigo pensar em nada para encontrar o tipo de contêiner.

Para resumir: que tipo de maquinário (se houver) pode ser usado para casos como esses. Até que ponto é possível lidar com misturas de argumentos de modelo, argumentos modelo de modelo, qualquer número de argumentos e argumentos não-modelo de tipos desconhecidos.

questionAnswers(3)

yourAnswerToTheQuestion