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

SL & STL C++ Discussion :

[C++][std::list] Reinterpret cast


Sujet :

SL & STL C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Points : 102
    Points
    102
    Par défaut [C++][std::list] Reinterpret cast
    SAlut a tous,

    J'ai une petite question concernant les listes.
    J'ai ma liste liste dasn laquelle je veux mettre des objet inconnus
    je cré donc ma liste comme ça :

    Ensuite, je met des choses dans ma liste.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    list.push_front((void*)(unTruc) )
    list.push_front((void*)(unAutreTruc) )
    list.push_front((void*)(EncoreUnTruc) )
    Ensuite je veux depiler mes "trucs", comment savoir qu'est ce que j'ai en sortie ??? j'ai des void* masi comment savoir si c'est unTruc ou unAutreTruc ??

    Le reinterpret cast pourrait'il m'aider, je cast le void* en unTruc masi si en fait c'est unAutreTruc commen ça se passe ??

    En gros ma question est comment faire pour mettre n'importe quoi dans une liste (le void* ça doit marcher) et surtout comment sortir les choses de la liste en les "castant" correctement. Je sais pas si je suis claire :s

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Ah mon dieu, vade retro!
    Tu sabordes l'une des plus belles choses du C++ : les conteneurs génériques typés.
    Repense ton design pour ne plus (jamais) utiliser void*. Le C++ t'en donne les moyens.
    Quel est le type de tes objets ? Ils n'ont aucun rapport ? Pourquoi les mettre ensembles alors ?
    Une solution c'est un objet racine parent qui permet de déterminer le type de l'enfant, mais pourquoi as-tu besoin d'une telle chose ?

  3. #3
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    J'ai eu trop peur en voyant std::list<void*>
    Ca mérite

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Points : 102
    Points
    102
    Par défaut lol
    Je sais bien ça moi ausii ça me pique les yeux de voir ça
    Je fait du dev sur un smartphone et j'utilise la WTl pour mes boites de dialogue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class CDialogContactSelection : public CDialogImpl <CDialogContactSelection>
    Donc le type generique pour ma liste ça srait CDialogImp<> mais comme c'est une classe template pas moyen de faire une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::list<CDialogImpl <>>
    il faut bien un type dans le template ? (arretez moi si je me trompre)
    Donc oui evidament un conteneur typé avec la classe de base c'est achement mieux. Mais la j'ai pas de classe de base, j'ai un template de base :s resultat ma liste ne peut pas avoir un ype "generique"

    L'idee de cette chose est de pouvoir navigué de fenetre ne fenetre sans contraintes. Exemple j'ai plusieurs dialogue du meme template masi c'est pas la meme classe.

    dlg1, dlg2, dlg3, dlg4 donc 4 classes differentes, sur le telephone le fonctionnemnt classique c'est tu ouvre de dlg1 à dlg4 et si tu ferme dlg4 tu retombe sur dlg3 et ainsi de suite.
    Moi je veyux pouvoir passer de dlg4 à dlg1 en fermant au passage toutes les fentre netre 4 et 1.

    L'idee est donc d'avoir un manager gérant les fenetres, d'ou la necessité d'avoir une liste de fenteres ouvertes, deux solution :
    1- Le manager garde les HWND de chaque fentre avec le rang d'apparition et ensuite on envoi des messages aux fenetres. Bien masi pas top le manager devient vite lourd...

    2 -On maintient un tableau de reference sur les fentres d'ou le tableau de pointeur void* et le comportement des fentres est géré par les fenetres elles meme


    La solution 1 est largement faisable, la liste ne connait que un seul type pas de probleme.

    Pour la solution 2, il faut une liste avec une classe de base, impossible dasn notre cas, à moins que les templates pas completement defini puisse passer :s. Ou alors une technique qui se raproche "detypage" des objet pour les ranger et ensuite les resortir

    Alors , voilà le pourquoi de cette horeur

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Ah mon dieu, vade retro!
    Tu sabordes l'une des plus belles choses du C++ : les conteneurs génériques typés.
    Repense ton design pour ne plus (jamais) utiliser void*. Le C++ t'en donne les moyens.
    Quel est le type de tes objets ? Ils n'ont aucun rapport ? Pourquoi les mettre ensembles alors ?
    Une solution c'est un objet racine parent qui permet de déterminer le type de l'enfant, mais pourquoi as-tu besoin d'une telle chose ?
    +1
    Il y a sans doute au moins 1 point commun à tous ces objects, non ?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    CDialogImpl accepte en 2° paramètre template la classe de base à utiliser, qui est par défaut CWindow.
    Donc tous des dialog sont des CWindow. Ca tombe bien, un gestionnaire de fenêtre gère des... fenêtre

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Points : 102
    Points
    102
    Par défaut Nickel :D
    Je doit dire :
    TROP TOP !!!
    Merci bein pour cette fabuleuse nouvelle
    Merci encore

  8. #8
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Ben voila, un coup de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::list<CWindow> list;
    et c'est gagné !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [cast] dans le cas d'une Std::list
    Par ZaaN dans le forum SL & STL
    Réponses: 9
    Dernier message: 26/10/2006, 10h07
  2. [dev-C++]std::list<tree_node<T>*> iterator;
    Par jmv dans le forum Dev-C++
    Réponses: 7
    Dernier message: 06/05/2005, 13h14
  3. acceder au n iéme element d'une liste std::list
    Par sorari dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/03/2005, 15h21
  4. [std::list][find_if] problème avec mes foncteurs
    Par n!co dans le forum SL & STL
    Réponses: 12
    Dernier message: 04/02/2005, 11h56
  5. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49

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