OK, donc j'ai deux classes (complètement différentes, projet différent) en utilisant des itérateurs maintenant. On a iterator
et reverse_iterator
fonctionnant comme prévu, et l'autre, courant a iterator
et un const_iterator
semi-cassé (spécifiquement, parce que const_iterator dérive de l'itérateur, le code LinkedList<int>::iterator i = const_list.begin()
est valide et te permet de modifier la liste const définie ...) .
J'ai l'intention d'ajouter les quatre types à cette classe ... Si je peux.Comment appliquer le principe DRY aux itérateurs en C++? (itérateur, const_iterator, reverse_iterator, const_reverse_iterator)
Comment procéder pour minimiser le code de copie/collage et modifier uniquement le type de retour? Créer une classe de base comme base_iterator
à partir de? Créer un iterator
ou const_iterator
et hériter de cela? Hériter de certains std :: class? Si l'un de ces cas est la "meilleure" approche, quel code va où?
Peut-être qu'aucune des alternatives n'est bonne? Je suis assez perdu ici, et je ne trouve pas beaucoup de matériel de référence.
Tout conseil est apprécié, mais s'il vous plaît gardez à l'esprit que je suis nouveau sur le sujet (les deux itérateurs et C++ en général, en particulier OOP). J'ai essayé, en vain, d'étudier les fichiers d'en-tête livrés avec GCC - ils ne sont pas exactement le tutoriel que je cherche.
implémentations stdlib sont, en général, des choix pauvres à apprendre, pour toutes les langues. Ils doivent souvent traiter avec des interfaces externes (par exemple, le système d'exploitation, d'autres langages), doivent être rétrocompatibles avec le code de la dernière décennie et d'autres facteurs qui ne s'appliquent tout simplement pas à vous. En résumé: ils ne sont pas écrits avec l'enseignement comme objectif. Un bon livre est un must et vous servira beaucoup mieux. –