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 :

RAII et virtual


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Par défaut RAII et virtual
    re

    nouveau probleme

    j'ai recemment decouvert les joies du RAII et de ses autodestructions
    sans avoir a faire de new. Merveuilleux.

    Voila mon probleme, je veux acceder a une ressource (un driver pour ceux qui ont suivi mes precedents posts). Le driver est ok maintenant j'ai qqc de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    driver D;
    D.fnt1();
    D.fnt2();
    }
    et a la fin de l'accolade les ressources utilisées par le driver sont libérées.

    Nouveau besoin => nouveau probleme, le peripherique est retournée chez son proprietaire et je voudrais maintenant simuler ce qu'il fait habituellement a partir d'une classe simulateur (ayant exactement les memes methodes). Donc polymorphisme et virtual.

    Au niveau besoin, ma fonction recoit un parametre qui indique celui qu'il doit choisir : PERIPH ou SIMUL
    j'aurais aimé avoir le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fnt(type t)
    {
    driver D(t);
    D.fnt1();
    D.fnt2();
    }
    c'est tres simple a faire avec des pointeurs et des fonctions virtual
    mais la sans pointeur ...

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Tu prend comme classe un DriverHolder, qui gère en interne un Driver*, dont le type dynamique dépent de t.
    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
     
    class DriverHolder
    {
      DriverHolder(Type t)
      {
        switch(t)
        {
        case 1 : myDriver = new Periph; break;
        case 2 : myDriver = new Simul; break;
        }
      }
      ~DriverHolder() {delete myDriver;}
    };
     
    fnt(type t)
    {
      DriverHolder D(t);
      D.fnt1();
      D.fnt2();
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Par défaut
    euh ok
    mais je vois pas trop comment on peut faire :


  4. #4
    Expert confirmé

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Le RAII n'empêche pas d'utiliser les pointeurs... un classique du RAII est même le pointeur intelligent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef std::auto_ptr<Driver> DriverPtr;
     
    fnt(type t)
    {
        DriverPtr d = Driver::New( t );
        d->fnt1();
        d->fnt2();
    }
    Mais dans ton cas je verrais bien une séparation entre le driver d'un côté (classe abstraite de base avec 2 implémentations : PERIPH et SIMUL) et son utilisation de l'autre (ta classe Driver).

Discussions similaires

  1. virtuals hosts apache
    Par kaiser2003 dans le forum Apache
    Réponses: 5
    Dernier message: 01/08/2004, 17h18
  2. [tomcat]comment cree un "Virtual Host" avec tomcat
    Par nouaman dans le forum Tomcat et TomEE
    Réponses: 17
    Dernier message: 04/06/2004, 22h51
  3. Déclenchement Programme sur Virtual Key
    Par Tom-G dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 09/05/2003, 12h58
  4. Virtual-key code
    Par lyrau dans le forum Windows
    Réponses: 2
    Dernier message: 29/03/2003, 19h22
  5. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 17h50

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