Question

Est-ce qu'un modèle modèle variadique être utilisé pour attraper tous les cas d'un paramètre de modèle étant passé que lui-même est un modèle?

Je l'ai utilisé templating pour produire une sortie de débogage pour certaines méthodes à base de modèles. Tout d'abord, j'ai créé un gestionnaire générique, il spécialisé pour les types natifs:

template<typename... PARAMS> struct TypeList{};

template<typename TYPE> inline void ntype(ostream &out, TypeList<TYPE>) {
    out << typeid(TYPE).name();
}

template<> inline void ntype(ostream &out, TypeList<int>) {
    out << "int";
}

...

Alors j'ai essayé d'ajouter un second format de modèle pour les types de modèles de capture étant passé:

template<typename ... SUB, template<typename...> class TYPE> void ntype(ostream &out, TypeList<TYPE<SUB...> >) {
    ntype(out, TypeList<typename TYPE>());
    out << '<';
    subtype(out, TypeList<SUB...>());
    out << '>';
}

Lorsque le sous-type est une méthode de gabarit conçu pour récursion dans la liste des param, l'application de chacune de type n () à son tour.

Le problème est quand je tente d'appeler cela avec quelque chose à l'effet de:

ntype<SomeClass<int> >(out, TypeList<SomeClass<int> >());

Il ne correspond jamais la première fonction de modèle générique - pas d'erreurs de compilation, mais il ne correspond jamais à la version du modèle de modèle. Je suis sûr que son simplement un manque de compréhension de ma part, mais les résultats de google semblent très minces sur le terrain en ce qui concerne des exemples clairs de modèles de modèle, et encore plus minces en ce qui concerne params modèle variadique.

Quelqu'un peut-il expliquer si ce que je tente est même possible et, si oui, ce que je fais mal?

Était-ce utile?

La solution

Je semble simplement eu une faute de frappe -. J'avais ajouté () après un de mes TypeListes dans une déclaration de fonction, probablement de copier et coller à partir d'un appel de fonction à 3h du matin, ce qui était à l'origine du décalage

Ainsi, au cas où quelqu'un se demande, oui il est possible, et ce qui précède est une manière parfaitement acceptable de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top