La classe C++ template spécifique baseclass
Disons que j'ai des classes:
class Base{};
class A: public Base{
int i;
};
class B:public Base{
bool b;
};
Et maintenant, je veux définir basé sur un modèle de classe:
template < typename T1, typename T2 >
class BasePair{
T1 first;
T2 second;
};
Mais je tiens à le définir à ce que seuls les descendants de la classe de Base peut être utilisé comme templateparameters.
Comment puis-je le faire?
- Vous devez corriger votre syntaxe du modèle. Et voulez-vous dire A et B d'être privé dérivé?
Vous devez vous connecter pour publier un commentaire.
Plus exactement:
C++11 introduit
<type_traits>
C++ ne permet pas encore de permettre à cette directement. Vous pouvez le réaliser indirectement à l'aide d'un
STATIC_ASSERT
et la vérification de type à l'intérieur de la classe:static_assert
etis_base_of
diplômé de langue officielle fonctionnalités de C++11. Ils font beaucoup plus intuitive/moins horrible que le code de la accepté de répondre.C'était une bonne question! Alors que des recherches sur ce par l'intermédiaire de ce lien, je suis venu avec la suivante, qui, certes, n'est pas tellement différente de la solution fournie par là. Apprendre quelque chose tous les jours...check!
Tout d'abord, fixer la déclaration
Ensuite, vous pouvez déclarer, dans une classe de base certains private function Foo(); et que dire de la classe de Base pour avoir BasePair comme ami; puis, dans l'ami de constructeur, il vous suffit d'appeler cette fonction. De cette façon, vous obtiendrez l'erreur de compilation lorsque quelqu'un tente d'utiliser d'autres classes que les paramètres du modèle.
Dans la réponse suggérée par des inconnus(yahoo), il n'est pas nécessaire d'avoir des variables de type X et Y en tant que membres. Ces lignes sont suffisantes dans le constructeur: