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 :

Utilisation d'un std::queue<void*>


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Par défaut Utilisation d'un std::queue<void*>
    Bonjour, je suis un gros boulet, je ne sais pas utiliser un conteneur de la STL pour des structures de données différentes.
    Je souhaite pouvoir ajouter dans la file des int, string, char*, long, unsigned char*, ... bref un peu tout ce qui est types de base, mais aussi des tableaux de string aussi.
    En faisant le push d'un const char* la compilation m'a engueulé, et tout bonnement j'ai casté en void*. Est ce une bonne méthode et le contenu sera t'il correctement utilisable par la suite ?!

    On m'a aussi dit de faire ma classe pour gérer les erreurs, mais la classe Queue est déjà faite je ne vois pas en quoi ce serait utile...

    bref une question de première année j'ai honte

    merci !

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Hum si c'est des types de bases à la rigueur tu fais un queue d'union. Sinon une solution plus C++ serait de stocker des boost::variant. (si tu as un nombres fixés de type à stocker sinon boost::any).

    Enfin, en général ça relève plus d'une erreur de conception d'avoir ce genre de besoin...

  3. #3
    Membre éclairé Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Par défaut
    Je refactorise sans pouvoir changer le code incriminé
    Le code envoi une succession de données par ex int, string, int, int, float, char* en passant par des méthodes dédiées. J'aimerai récupérer tout ça petit à petit dans une file à traiter à la fin pour voir ce qui a été donné.
    Je pensais passer sinon par une classe abstraite AbstractParameter mis dans la file et avec chaque type différent stocké dans des classes héritant de cette classe abstraite...Je vais voir ce que ça donne, ça paraît sympa mais je suis sûr que ça va clocher quelque part!

    Merci pour les explications sinon : j'ai juste pas suivi le truc de l'union (ça existe en C++ encore? ou alors ça correspond à ma classe abstraite)
    et Boost je crois que je ne peux pas l'installer mais je vais peut être me lancer là dedans pour apprendre

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Par défaut
    Salut,

    Si j'ai bien compris tu cherche un moyen d'avoir une fonction qui stocke dans la std::queue des éléments de types différents?

    Si c'est ce que tu cherche regarde du côté des template. Un exemple d'une fonction qui peut stocker n'importe quel type de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    template <typename T> class Queue
    {
     
    public : /*.....*/  
           void stocke(const T& element);
     
    private:
           std::queue<T> _myQueue;
    };
     
    ////
     
    template<typename T>
    void
    stocke(const T& element)
    {
          _myQueue.push(element);
    }

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par atm0sfe4r Voir le message
    Salut,

    Si j'ai bien compris tu cherche un moyen d'avoir une fonction qui stocke dans la std::queue des éléments de types différents?

    Si c'est ce que tu cherche regarde du côté des template. Un exemple d'une fonction qui peut stocker n'importe quel type de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    template <typename T> class Queue
    {
     
    public : /*.....*/  
           void stocke(const T& element);
     
    private:
           std::queue<T> _myQueue;
    };
     
    ////
     
    template<typename T>
    void
    stocke(const T& element)
    {
          _myQueue.push(element);
    }
    Il parle d'une collection hétérogène. Ce que tu donnes c'est une collection homogène

  6. #6
    Membre éclairé Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Par défaut
    voilà c'est ça...car la std::queue donne déjà une forme de pile sous forme template, je pense que je n'aurais pas eu à reimplémenter une file.

    Merci quand même!

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

Discussions similaires

  1. Nettoyer des std::queue en une fonction template
    Par gassi64 dans le forum SL & STL
    Réponses: 16
    Dernier message: 23/07/2009, 15h05
  2. std::queue très rapide !?
    Par rulianf dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2009, 17h52
  3. Valeur innatendue avec std::queue::front()
    Par Krishna dans le forum SL & STL
    Réponses: 3
    Dernier message: 29/12/2008, 14h37
  4. mutex ou ne pas mutex, doit-on protéger les std::queue
    Par bleuerouge dans le forum SL & STL
    Réponses: 3
    Dernier message: 20/07/2008, 18h28

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