Implémentation STL de MS VC++2005
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 :
Code:
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;
}
} |
En effet, il vérifie
Code:
1 2
|
this->_Mycont != _Right._Mycont |
Je cherche une façon de contourner celà facilement.
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
Code:
const static iterator DUMMY
(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().
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.
variables d'environnement
Désolé, il ne s'agit pas de Variables d'environnement évidemment.
C'est bien des macros.
Je corrige mon message avec la solution.
ce qu'il faut faire avant les include est
#define _SECURE_SCL 0
#define _HAS_ITERATOR_DEBUGGING 0
Sorry pour le lapsus