2 votes

Conteneur d'objets polymorphes

Puisque le pointeur et la référence réalisent tous deux la relation is-a en contexte de l'héritage en c++. Donc, comme nous avons l'habitude de stocker un conteneur de pointeurs vers un objet pour pour obtenir un comportement polymorphe, est-il également possible de le faire avec des conteneurs ? C'est-à-dire stocker des références au lieu de pointeurs dans le conteneur ?

Ma question est différente de este parce que c'est dans le contexte du polymorphisme.

0voto

Smeeheey Points 7790

Vous pouvez le faire en utilisant la classe spéciale std::reference_wrapper par exemple :

std::vector<std::reference_wrapper<MyClass>> ref_vector;

Voici un exemple d'utilisation :

std::vector<int> vec{1, 2};
std::vector<std::reference_wrapper<int>> refs(vec.begin(), vec.end());

vec[1] = 3;
std::copy(refs.begin(), refs.end(), std::ostream_iterator<int>(std::cout, " "));

La sortie est "1 3", ce qui démontre que les références aux éléments originaux sont conservées plutôt que des copies (sinon la sortie aurait été "1 2").

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X