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

Boost C++ Discussion :

"typecast" sur la classe de base?


Sujet :

Boost C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Par défaut "typecast" sur la classe de base?
    Bonjour,

    J'ai une classe B qui dérive de A et j'ai un "shared_ptr" sur la classe B.

    Je dois passer en paramèter ce "shared_ptr" à une fonction qui accepte un "shared_ptr" sur la classe A seulement.

    J'ai essayé de multiples cast mais je n'en vient pas à bout.

    Des recommendations?

    ps. Pas de recommendation sur le design S.V.P., je dois faire avec.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Pas besoin de cast, c'est supposé se faire tout seul dans le sens dérivée vers base :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <iostream>
    #include <boost/shared_ptr.hpp>
     
    struct base
    {
       virtual ~base(){}
       virtual void do_it() const
       {
          std::cout<<"base::do_it\n";
       }
     
       virtual void do_it_non_const()
       {
          std::cout<<"base::do_it_non_const\n";
       }
    };
     
    struct derivee : public base
    {
       virtual void do_it() const
       {
          std::cout<<"derivee::do_it\n";
       }
     
       virtual void do_it_non_const()
       {
          std::cout<<"derivee::do_it_non_const\n";
       }
    };
     
    void ma_fonction(boost::shared_ptr<base> const&p)
    {
       p->do_it();
    }
     
    void ma_fonction_non_const(boost::shared_ptr<base> &p)
    {
       p->do_it_non_const();
    }
     
    int main()
    {
       boost::shared_ptr<derivee> p(new derivee);
       ma_fonction(p);
       boost::shared_ptr<base> pb = p;
       ma_fonction_non_const(pb);
       return 0;
    }
    [EDIT]
    Citation Envoyé par acheo Voir le message
    ps. Pas de recommendation sur le design S.V.P., je dois faire avec.
    Convertir de la classe dérivée vers la classe de base n'est pas un problème de design, donc pas de soucis

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Par défaut
    C'est aussi ce que je crois mais j'obtiens le message d'erreur:
    boost::bad_any_cast:failed conversion using boost any_cast
    Si j'utilise un dynamic cast, j'obtiens la même erreur. A vrai dire, j'obtiens cette errreur pour tous les type de cast.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Tu peux montrer ton code ? j'ai l'impression tout simplement que tu n'as pas l'héritage ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Par défaut
    J'aimerais bien mais ma compagnie ne serait pas d'accord.

    Je vais revérifier pour l'héritage mais je crois que c'est bien défini.

    Je suis à bout de ressources!

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par acheo Voir le message
    J'aimerais bien mais ma compagnie ne serait pas d'accord.
    Tu dois bien pouvoir le reproduire sur un exemple simple de 10 lignes, non ?

    MAT.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Par défaut
    Je me suis fait 3 petites classes qui respectent les mêmes structures et prennent les mêmes paramètres et ca fonctionne. Le problème est probablement beaucoup plus creux. Je vous remercie quand même pour votre aide.

Discussions similaires

  1. Besoins d'explications sur les classes de base et de son utilisation
    Par vandeyy dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 07/03/2014, 14h49
  2. Question de base sur les classes
    Par deaven dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 16h20

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