Bonjour à tous, j'aimerais savoir quel serait le meilleur moyen de définir mes types de façon à avoir les conversions que je souhaite.
Soit une classe template Matrix possédant 6 types d'iterateur :
-normal_iterator (ne garantit que de pouvoir accéder aux cases à toutes les cases mais ne garantit pas l'ordre).
-const_normal_iterator
-lign_iterator
-const_lign_iterator
-column_iterator
-const column_iterator
Existe-t'il un moyen qui demande le moins de code possible (plus il y a de code, plus les évolutions sont difficiles), de permettre à ces conversions :
-Il n'existe aucun lien entre deux iterators (qu'ils soient lign, const, column, ou normal) qui ne viennent pas de la même classe matrice (pas les même template).
-On peut comparer deux iterators (operator ==, !=) mais pas les operator < ou >.
-Les conversions iterator->normal_iterator ou const_normal_iterator sont implicites.
-Les conversions qqch_iterator->const_qqch_iterator sont implicites
-Les conversions normal_iterator->qqch_iterator ou const_qqch_iterator sont explicites.
-Les conversions const_normal_iterator->const_qqch_iterator sont explicites.
-Il existe les operator +,-,+=,-=,... sur tous les iterators.
-Conversion explicite pointeur<->iterator
-J'ai peut être oublier qqch.
Aujourd'hui, j'ai définit tous ces nested à la main, avec toutes leurs fonctions (assez énorme : environ 30 par iterator) et sa me donne :
-un header illisible.
-un inl illisible.
-une galère quand je veux rajouter une classe de politique à ma classe Matrix.
-une galère si je veux modifier quoi que ce soit.
Je vous demande donc votre point de vue :
-Est-ce que certains de mes iterator peuvent-ils devenir des typedefs ?
-Si oui, lesquels, si non y a t-il plus simple ?
Merci.
Partager