Vous pouvez le faire dans le C++ actuel. Vous donnez le modèle un certain nombre de paramètres « assez grand », et vous leur donnez les valeurs par défaut:
class nothing1 {};
class nothing2 {};
class nothing3 {};
template <class T1 = nothing1, class T2 = nothing2, class T3 = nothing3>
class X : public T1, public T2, public T3 {};
Ou vous pouvez obtenir plus sophistiqués et récursion utilisation. Tout d'abord vous avant-déclariez le modèle:
class nothing {};
template <class T1 = nothing, class T2 = nothing, class T3 = nothing>
class X;
Ensuite, vous vous spécialisez dans le cas où tous les paramètres sont par défaut:
template <>
class X<nothing, nothing, nothing> {};
Ensuite, vous définissez correctement le modèle général (que vous avez déjà que l'avant -declared):
template <class T1, class T2, class T3>
class X : public T1, public X<T2, T3>
Remarquez comment dans la classe de base, vous héritez X, mais vous manquez le premier paramètre. Alors ils glissent tous le long d'un endroit. Finalement, ils seront tous par défaut, et la spécialisation interviendra, qui n'hérite de rien, mettant ainsi fin à la récursivité.
Mise à jour: juste eu un sentiment étrange que j'avais posté quelque chose comme ça avant, and guess what...
vous pouvez aussi utiliser une seule classe – sellibitze
@sellibitze « rien » - J'utilise utiliser une seule classe « rien » dans la version récursive. Vous ne pouvez pas utiliser la même classe pour les valeurs par défaut dans la version non récursive, car vous obtiendrez des erreurs "rien n'est déjà une classe de base directe". –
Je ne comprends pas: pourquoi omettez-vous le premier paramètre en héritant de X? – Gili