J'ai une classe abstraite Primitive
, qui a quelques fonctions abstraites pures.Comment créer une instanciation de modèle pour un baseclass abstrait?
Puis-je avoir une mise en œuvre de l'arbre avec des modèles:
template<typename PrimitiveT>
class PrimitiveTree {
...
}
// explicit instantiation
template class PrimitiveTree<Project::Primitive>; // abstract
template class PrimitiveTree<SimpleTrianglePrimitive>; // implementation
qui est utilisé dans un autre fichier comme
PrimitiveTree<Primitive> *ptree;
Avec ce code, je reçois error C2259: 'Project::Primitive': cannot instantiate abstract class
. Lorsque je supprime l'instanciation de la classe abstraite, j'obtiens des erreurs de liens que le symbole correspondant pour PrimitiveTree<Primitive>
n'est pas trouvé dans le fichier objet.
Une classe similaire avec les méthodes dans le fichier d'en-tête n'a pas ces problèmes, lorsqu'il est utilisé avec Primitive
comme argument de modèle.
Comment ai-je besoin d'instancier la classe de modèle, de sorte que les symboles neccessary sont ajoutés au fichier objet, même si l'argument de modèle est une classe abstraite?
En général, il est une mauvaise idée de mélanger polymorphisme dynamique avec des modèles. Réfléchissez deux fois – KonstantinL
Veuillez fournir un [MVCE] (https://stackoverflow.com/help/mcve). Il n'est pas clair comment le paramètre de modèle 'PrimitiveT' est utilisé par les (spécialisations du) modèle de classe' PrimitiveTree'. – Walter
@Walter il y a une balise magique '[mcve]' pour [mcve] –