Dans le langage de programmation C++, lorsque nous utilisons des types instanciés de modèles dans des classes dérivées, nous pouvons rencontrer l'erreur du compilateur "Dérivé des types instanciés de modèles non autorisés". La raison de cette erreur est que nous essayons de dériver une nouvelle sous-classe à partir d'un type instancié de modèle, qui n'est pas lui-même une classe. Cet article expliquera la cause de l'erreur et fournira une solution au problème.
1. Cause de l'erreur
Template est un outil de programmation général. Il peut être utilisé pour créer des classes ou des fonctions et peut être instancié en fonction de différents types de données. Lors de l'utilisation de modèles, les paramètres du modèle doivent être spécifiés. En C++, lors de l'utilisation d'un modèle de classe, le nom de la classe doit être suivi d'une liste de paramètres. Par exemple :
template<typename T> class MyClass { //... };
Lorsque nous utilisons ce modèle de classe, nous devons fournir un type concret :
MyClass<int> myObj;
Cela créera une spécialisation int du modèle MyClass.
Cependant, lorsque nous utilisons des types instanciés de modèles dans des classes dérivées, nous rencontrerons l'erreur ci-dessus, par exemple :
template<typename T> class MyClass { //... }; class MyDerivedClass: public MyClass{ //... };
Ce code affichera l'erreur "La dérivation à partir de types instanciés de modèles n'est pas autorisée".
La raison de cette erreur est que MyClass
2. Solution
Afin de résoudre ce problème, nous pouvons utiliser les paramètres du modèle pour spécifier la classe à dériver. Par exemple, si nous voulons dériver une nouvelle classe de MyClass
template<typename T> class MyClass { //... }; templateclass MyDerivedClass: public MyClass { //... };
Cela évitera les erreurs.
De plus, nous pouvons également utiliser un alias de modèle (alias de modèle) pour résoudre ce problème. Les alias de modèle peuvent fournir un nouveau nom pour un modèle, ce qui nous permet de l'utiliser facilement dans le programme. Par exemple, dans le code ci-dessus, l'alias du modèle peut être défini comme ceci :
template<typename T> using MyNewClass = MyClass<T>; class MyDerivedClass: public MyNewClass<int> { //... };
De cette façon, une classe peut être dérivée d'un alias de modèle.
Résumé
En C++, l'utilisation de modèles est une pratique très courante, mais lors de l'utilisation de types instanciés de modèles dans des classes dérivées, il est facile de rencontrer l'erreur du compilateur "Dérivé des types instanciés de modèles non autorisés". Il existe deux solutions : l'une consiste à utiliser les paramètres du modèle pour spécifier la classe à dériver, et l'autre consiste à utiliser des alias de modèle pour fournir un nouveau nom au modèle. Grâce aux méthodes ci-dessus, nous pouvons facilement résoudre ce problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!