2 votes

Pointeur d'objet générique C++

J'ai récemment travaillé sur un projet C++ qui nécessite un système permettant de stocker des classes dans une carte (une bibliothèque). D'après mes recherches, j'ai conclu que je devais utiliser un pointeur vers un objet de la classe. C'est bien, j'ai l'objet, mais je dois faire en sorte que le pointeur s'adapte à la classe. multiple différents objets de différentes classes. Si cela n'est pas clair, voici mon code.

typedef NO-IDEA-WHAT-GOES-HERE;
struct library {
    std::map<std::string, objPointer> lib;
};

J'ai besoin de savoir comment créer un pointeur qui peut accepter un objet de plus d'une classe unique, c'est-à-dire

//NOT WHAT I WANT
module someMod;
library *objPointer;
objPointer = &someMod;

Mais quelque chose de plus comme...

typedef POINTER; //Not sure what to put here
module someMod;
std::map<std::string, POINTER> lib;
lib["something"] = someMod;
otherModule someOtherMod;
lib["somethingelse"] = someOtherMod;

Merci d'avance !

4voto

R Sahu Points 24027

C'est bien, j'ai l'objet, mais je dois faire en sorte que le pointeur s'adapte à plusieurs objets différents de classes différentes.

Il s'agit d'un modèle commun à de nombreuses bibliothèques et applications.

  1. Créez un espace de nom spécifique à votre application.
  2. Créez une classe abstraite qui peut être utilisée comme classe de base de toutes les classes importantes de votre application.
  3. Assurez-vous que toutes les classes importantes sont dérivées de la classe de base.

Cela vous permettra de stocker des pointeurs vers les instances de toutes les classes importantes de votre application dans le conteneur de votre choix.

Au fil du temps, vous constaterez que vous serez en mesure de mettre en œuvre de nombreuses fonctionnalités en utilisant uniquement l'interface de la classe de base.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X