Bonjour,
Je suis passé de VS2003 à VS2005 et j'ai noté le problème suivant : il semble que de nombreuses choses ont changé dans l'implémentation de la STL.
Depuis la nouvelle version, il n'est plus possible de comparer (pour l'égalité) des itérateurs de liste correspondant à des containers différents.
En effet :
En effet, il vérifie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #if _HAS_ITERATOR_DEBUGGING void _Compat(const _Myt_iter& _Right) const { // test for compatible iterator pair if (this->_Mycont == 0 || this->_Mycont != _Right._Mycont) { _DEBUG_ERROR("list iterators incompatible"); _SCL_SECURE_TRAITS_INVALID_ARGUMENT; } }
Je cherche une façon de contourner celà facilement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2this->_Mycont != _Right._Mycont
La raison est que j'ai une classe type conteneur , qui utilise la liste de la stl. (c'est un pool d'objet avec une stratégie d'allocation.)
Les iterateurs de ce conteneur sont implémentés à partir d'un itérateur de liste. Je reproduit le concepte de "pointeur NULL" avec un(défini dans la class d'itérateur, idem pour le const_iterator). Ces valeurs statiques sont initialisées à partir d'une instance statique vide du conteneur avec begin().
Code : Sélectionner tout - Visualiser dans une fenêtre à part const static iterator DUMMY
Avec cette nouvelle implémentation de la stl, je ne peux plus comparer mes iterator avec iterator::DUMMY ou mes const_iterator avec const_iterator::DUMMY .
Une idée ?
S.
Partager