Re[7]: ссылка на локальный вектор
От: sci_reseacher  
Дата: 16.05.16 16:41
Оценка:
Здравствуйте, peterbes, Вы писали:

P>Здравствуйте, uzhas, Вы писали:


P>Откуда такие сложности на пустом месте, интерфейсы, абстрактные классы, наследования, перегрузка, куча классов, если задача решается напрямую без академических извратов.



P>
P> template<class T>
P> struct AB
P> {
P> public:
P>   AB(){}
P>   void write( const size_t size, T* pT )
P>   {
P>     if (_data.size() < size)_data.resize( size );
P>     copy( pT, pT + size, _data.begin() );
P>   }

P>   const vector<T>& read(){ return _data; }
P>   size_t get_size(){ return _data.size(); }
P> private:
P>   vector<T> _data;

P> };
P>


P>
P>  float mydata[] = { 1.0f, 2.4f, 3.14f, 2.71f };
P>  AB<float> sci_buf;
P>  //sci_buf.w
P>  sci_buf.write( 4, (float*) mydata );
P>  auto& Vals = sci_buf.read(); 
 
P>  Vals[2] = 2.53f; <---- Хлоп! Ошибка компиляции, данные только на чтение
P>



в одном классе мне нужен std::vector<T>, в другом T*, т.к. это две разные реализации класса, работающие на разных устройствах --- а пользователь их может выбирать.

удобнее всего вернуть ссылку:
const vector<T>& read(){ ... }

т.к. далее работать с классом проще.

P.S. "академические навороты" нужны чтобы "застолбить" единый интерфейс
Отредактировано 16.05.2016 16:42 sci_reseacher . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.