Re[3]: Элементы контейнера с перегруженными операторами
От: Кодт Россия  
Дата: 22.08.07 15:04
Оценка: 9 (1)
Здравствуйте, Bell, Вы писали:

S>>ИМХО, нельзя хранить только классы с перегруженным &.

S>>Т.к. &vec[0] должен возвращать указатель на внутренний массив.
B>Ничего подобного. vec[0] возвращает ссылку на первый элемент — не больше и не меньше.

Ага, и чтобы получить массив, нужно сделать boost::addressof(vec[0]), который объезжает перегрузку & на кривой кобыле
примерно так
template<class T>
T* addressof(T& x) { return static_cast<T*>(&static_cast<char&>(x)); }


Беда в том, что реализации vector могут быть неустойчивы к перегрузке &.
Вот например, Dinkum STL для VC8.

template<class _Ty,
    class _Alloc>
    class _Vector_const_iterator
        : public _Ranit<_Ty, typename _Alloc::difference_type,
            typename _Alloc::const_pointer, typename _Alloc::const_reference>
    {    // iterator for nonmutable vector
/*........*/

    pointer operator->() const
        {    // return pointer to class object
        return (&**this);
        }
/*........*/
};
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.