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 :

Convertir des types


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut Convertir des types
    Bonjour,

    Voila, j'ai un ensemble de classe qui me permettent de stocker des objets.
    Je voudrais établir une fonction de convertion de type.

    Par exemple A pour des cubes et B pour des spheres, une convertion d'un cube en sphere serait de creer une sphere qui a le meme volume que le cube.

    Le probleme, c'est que je ne connait pas à l'avance le type des objets.

    Je voudrais pouvoir appeler :

    A = convertir(B);

    Si A est une sphere et B un cube
    ou Si A est une sphere et B une sphere
    ou Si A est un cube et B une sphere
    ou Si A est un cube et B un cube

    Et si B ou A est un poireau, et qu'il n'existe donc pas de conversion logique, la fonction renvoit NULL (on convertit des pointeurs)

    Je pense le faire en faisant deriver tous mes objets d'une classe mere "objetConvertible".

    Dans cette classe, il y aurait :
    - une info de type, initialisée par le constructeur de chaque classe dérivée
    - une fonction de conversion qui connait toutes les combinaisons d'objets convertibles et renvoit un pointeur ou NULL


    C'est un bon début à votre avis ?

    Sinon je connait pas trop boost::any et boost::any_cast, y'aurais moyen de faire un truc propre avec ça ?

  2. #2
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    Un cast? dynamic_cast?

  3. #3
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Ben oui, un truc dans ce genre, mais je cherche comment implémenter ça proprement.

    J'ai déjà bricolé un truc, mais je trouve ça un peu trop bancale.

    Et les convertions de type que je veux faire, il faut que je les implemente moi-meme car ce ne sont pas des types de données genre INT ou CHAR, mais des objets bien spécifiques...

  4. #4
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    Ben regarde dynamic cast, il ne fait pas que les types primitifs.

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Ok, mais je ne trouve pas comment on implemente une conversion en particulier...

    Par exemple, pour definir la conversion entre un objet cSphere et un objet cCube qui dérivent tous les deux de cConvertible ?

  6. #6
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    Exemple tu crées un vecteur de cConvertible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    vector<cConvertible *> c;
    //tu le parcours
    for (int i=0;i<c.size();i++)
    {
         if (dynamic_cast<CSphere*>(c[i])!=0 )
                      //Ton objet est une cSphere
     
         else
          {
                // tu le convertis en CSphere ou CCube
                cCube *c= dynamic_cast<cConvertible *>(c[i]);
                if (c!=NULL) //C'est ok
           }
    }
    Enfin un truc du genre...

Discussions similaires

  1. Convertir des type str en int
    Par Taylor08 dans le forum Général Python
    Réponses: 1
    Dernier message: 14/03/2014, 11h06
  2. [Encodage] Convertir des caractères de type \u00F8
    Par arakiri dans le forum Langage
    Réponses: 2
    Dernier message: 01/07/2010, 16h11
  3. convertir des types C en type Java
    Par kespy13 dans le forum Langage
    Réponses: 4
    Dernier message: 09/02/2009, 19h07
  4. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15
  5. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 11h08

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