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 :

Fonction pouvant retourner différents types de données


Sujet :

C++

  1. #1
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut Fonction pouvant retourner différents types de données
    Bonjour,

    J'ai une fonction qui peut renvoyer deux types de données différents. En fait, elle ouvre un fichier, regarde de quel type de fichier il s'agit et me renvoie une structure remplie de données.

    Je ne vois pas bien comment renvoyer les données... il faut que je déclare mon type de retour de données comme étant virtual ?

    Merci d'avance !
    Cordialement,
    Rodrigue

  2. #2
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    tu peut retourner un void* ou un puis caster a la reception

  3. #3
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
     
    Class A:
    {
              ...
         public:
              A();
              ...
              virtual ~A();
              ...
              virtual char* GetData()=0;
              ...
    }
     
    Class B: A 
    {
              ...
              char* GetData();
              ...
    }
     
    Class C: A
    {
              ...
              char* GetData();
              ...
    }
    Donc tu retournes un pointeur de class A qui contient soit B soit C
    Tu appels par exemple GetData() pour obtenir les données ou faire un traitement dessus, en fait ce que tu veux…

  4. #4
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    D'accord, j'ai bien compris l'histoire des fonctions virtuelles pures ! Merci

    Par contre, caster un void* on a le droit de faire ça ?

    Cordialement,
    Rodrigue

  5. #5
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Pourquoi le destructeur de la classe A est déclarer en virtual ?

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Faut toujours déclarer les destructeurs virtual sinon tu vas avoir des memory leak car des destructeurs ne seront pas correctement appelé

    Oui un void* peut être caster en n’importe quoi.
    Mais je pense que cela serait plus propre avec une bonne architecture de classes.

    Sinon oui c’est sur qu’un void * c’est rapide à mettre en place mais + destiné au C

  7. #7
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    en raport avec les type qui a mon sence execute le meme travaille que void*
    l'architecture COM/DCOM utilise un LPUNKNOWN windows utilise aussis des LPVOID et il me semble en avoir vue d'autres???

    y a t'il des difference avec void*

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Pour les types hétérogènes, il y a des types variants ou assimilés comme boost::any. On peut avec renvoyer les void* aux oubliettes et avoir à la place un code type-safe.
    Pour des types descendants tous d'un même ancêtre .... ben ils descendent tous d'un même ancêtre et on se retrouve à faire des factories.

    Sinon, pour le problème de (dé)sérialization, il y a boost.serialize. Cette bibliothèque permet de nous faire gagner du temps et de nous concentrer sur l'essentiel de l'application.

    Pour quand les destructeurs doivent être virtuels, voir la FAQ normalement. Perso je n'aime pas trop les déclarer de la sorte quand leur classe n'est pas destinée à être dérivée, et en particulier à avoir des objets détruits polymorphiquement.

  9. #9
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    problème de (dé)sérialization
    En quoi ça consiste ?

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Sauvegarder et restaurer des données (en simplifiant)

Discussions similaires

  1. Créer une fonction pouvant renvoyer 2 types différents
    Par Simara1170 dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2014, 15h42
  2. Fonction qui retourne un type anonyme
    Par Pelote2012 dans le forum Entity Framework
    Réponses: 1
    Dernier message: 14/10/2011, 13h24
  3. Tri différents types de données
    Par m@tix dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/07/2011, 15h06
  4. fonction qui retourne plusieurs types
    Par nouvelinscrit dans le forum C#
    Réponses: 4
    Dernier message: 19/07/2010, 17h00
  5. une fonction pouvant recevoir 2 types differents
    Par e_gaillard37 dans le forum C
    Réponses: 6
    Dernier message: 20/05/2009, 00h40

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