7
votes

C ++ Surcharge une fonction basée sur la classe dérivée partagée_ptr

Il y a beaucoup de questions similaires à celles-ci, mais je n'ai pas pu trouver précisément ce que je cherchais. Je suis désolé si c'est un duplicata.

J'ai un parent classe et deux classes dérivées qui héritent de celle-ci: xxx

i Ensuite, déclarez deux partagé_ptr à la classe de base et instancez-les avec un partagé_ptr à chacune des classes dérivées: xxx

Enfin, j'aimerais avoir une classe qui traite partagée_ptr sur laquelle des classes dérivées qu'il pointe de. Puis-je utiliser la surcharge des fonctions pour atteindre cet effet est la question suivante: xxx

donc je voudrais pouvoir écrire le code suivant: xxx < / Pré>

En ce moment, je dois faire (ce que je voudrais éviter): xxx


0 commentaires

3 Réponses :


7
votes

Il n'est pas possible de surcharger de la sorte, vous auriez besoin d'une instruction de commutation pour obtenir quelque chose de similaire avec une expédition dans une méthode sur Director . .

Peut-être que vous devriez déplacer le processus processus () à la classe parent (et le remplacer dans fils et fille ), de cette façon, vous pouvez utiliser une résolution de fonction virtuelle normale pour appeler la bonne.


0 commentaires

3
votes

Je ne suis pas sûr de savoir s'il y a de meilleures façons d'utiliser habituellement un modèle de visiteur http: // fr. wikipedia.org/wiki/visitor_pattern ou astuces de double envisage similaires sur ce besoin.

Vos objets ne connaissent probablement pas le partage_ptr sur eux-mêmes, mais généralement une référence simple fonctionne assez bien.


0 commentaires

0
votes

Idéalement, le parent code> fournirait une interface assez riche pour réalisateur code> pour traiter correctement chaque enfant, sans qu'il soit nécessaire de savoir quel enfant il est.

class ProcessSon: public Process, private Son {
public:
  void SpecificProc1(shared_ptr<Parent> obj) {
    // Make this part of the process based on class Son
  }

  void SpecificProc2(shared_ptr<Parent> obj) {
    // Make this part of the process based on class Son
  }
  ...
};


0 commentaires