IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Utilisation de pointeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 24
    Par défaut Utilisation de pointeur
    Bonjour à tous.
    Je voudrais savoir s'il est possible de pointer vers un objet sans que le compilateur ne sache de quel objet il s'agisse. Je vais essayer d'être plus clair :
    j'ai un void** (Liste_Selection). Ce void** est un tableau de void*. Chaque void* pointe vers la spécialisation d'une classe template.

    L'allocation mémoire de mon void** est dynamique :

    Liste_Selection = (void**)malloc(Taille_Tableau * sizeof(void*));

    ensuite, je connais le type de donnée que je veux stocker et leur nombre alors je fais par exemple :

    Liste_Selection[index] = (CConteneur<long int>*)malloc(sizeof(CConteneur<long int>));


    CConteneur est, vous l'aurez deviné, ma classe template.

    Mon problème est que quand je veux apeller une méthode de mon objet template, je ne peux pas faire :

    (this->Liste_Selection[i])->Allouer_Memoire(...);


    Le compilo me dit que void* n'est pas un type de pointeur vers un objet
    je suis obligé de faire :

    ((CConteneur<long int>*)(this->Liste_Selection[i]))->Allouer_Memoire(...);


    Mais devoir faire cela m'ennuit.
    Je voudrais donc pouvoir pointer vers un objet sans que le compilo ne le connaisse à l'avance (en faisant attention à ma gestion de la mémoire bien sur :)
    ou alors pourvoir passer à CConteneur<> un objet dynamique CConteneur<Type_Variable[index]> par exemple.
    Si quelqu'un a une idée ba c'est génial.
    Je continue de chercher.
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca paraît très sale tout ça. Les void* devraient toujours être évités (surtout dans un conteneur).

    Plusieurs solutions à ce problème :
    - Soit tu veux gérer tes objets via une base commune et dans ce cas tu peux tirer partie du polymorphisme via une classe de base
    - Soit tes objets n'ont rien à voir entre eux et tu peux utiliser boost.variant ou boost.any ...ou revoir ta conception, car stocker dans un même panier des pots de peinture et des oeufs ça n'a pas grand sens.

  3. #3
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    je craint que tu ne sois obliger de faire :
    ((CConteneur<long int>*)(this->Liste_Selection[i]))->Allouer_Memoire(...);
    Mais pourquoi utilise tu malloc au lieu de new.
    Et même pourquoi redéfinir ces propres containers lorsque la STL dispose de containers, d'iterateur et d'algos de toute sorte.
    consulte la FAQ si besoin

Discussions similaires

  1. Réponses: 14
    Dernier message: 22/04/2006, 21h59
  2. Optimiser l'utilisation des pointeurs
    Par progfou dans le forum C
    Réponses: 65
    Dernier message: 10/03/2006, 11h49
  3. Réponses: 6
    Dernier message: 21/02/2006, 16h47
  4. Utilisation de pointeurs
    Par renard s dans le forum Débuter
    Réponses: 7
    Dernier message: 08/12/2005, 08h18
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo