Je souhaite utiliser enable_if
pour définir une classe pour certains types. Parmi ces types, j'ai besoin d'utiliser des types de modèles, et je suis incapable de le faire fonctionner. Voici un MWE:Utilisez enable_if avec deux niveaux de modèle
La classe basé sur un modèle A
:
template<typename T, typename Enable = void> class A;
Sa spécialisation pour certains types simples, tels que les types intégrés ici, peuvent être définis comme suit:
template<typename T>
class A<T, std::enable_if<std::is_integral<T>::value>::type>
{ ... };
Maintenant, je définis un tas de types de modèles:
template<typename U> class X {...};
template<typename U> class Y {...};
Comment dois-je procéder pour spécialiser ma classe A
pour les types X
et Y
?
Deux tentatives qui ne fonctionnent pas:
avec ce qui suit, en déclarant un objet de type
A<X<int> >
par exemple donne une erreurincomplete type
:template<typename U> template<typename T> class A<T, std::enable<std::is_same<T, X<U> >::value || std::is_same<T, Y<U> >::value>::type> { ... };
avec ce qui suit, l'erreur est
'T' is not a template
.template<typename U> template<typename T> class A<T<U>, std::enable<std::is_same<T, X>::value || std::is_same<T, Y>::value>::type> { ... };