Здравствуйте, 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>>