Re[2]: STL: Сравнение валидных итераторов на разные контейне
От: Vain Россия google.ru
Дата: 06.11.10 15:59
Оценка:
Здравствуйте, derProgrammer, Вы писали:

V>>Сравнение валидных итераторов на разные контейнеры одного типа как минимум в MSVC 2005 приводит к закрытию программы.

V>>
V>>void main()
V>>{
V>>    std::list<int> a,b;

V>>    std::list<int>::iterator i1 = a.end();
V>>    std::list<int>::iterator i2 = b.end();

V>>    if(i1 != i2) //Boom
V>>    {
V>>        printf("Just not equal\n");
V>>    }
V>>}
V>>

V>>В моём случае это не критично и хотелось бы этого избежать. Как переносимо это отключить? Ну или хотябы для конкретных рантаймов?
P>Можно унаследовать от std::list<T>::iterator собственный класс итераторов и работать с ними. Останется переопределить операторы сравнения, добавив проверку на несовпадение контейнеров итераторов. Хотя, конечно, реализация в таком случае будет зависеть от реализации STL (имени поля контейнера в protected секции итераторов), что не есть хорошо.
Это никуда не годится.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.