Сообщение Re[7]: ссылка на локальный вектор от 16.05.2016 16:41
Изменено 16.05.2016 16:42 sci_reseacher
Здравствуйте, peterbes, Вы писали:
P>Здравствуйте, uzhas, Вы писали:
P>Откуда такие сложности на пустом месте, интерфейсы, абстрактные классы, наследования, перегрузка, куча классов, если задача решается напрямую без академических извратов.
P>
P>
в одном классе мне нужен std::vector<T>, в другом T*, т.к. это две разные реализации класса, работающие на разных устройствах --- а пользователь их может выбирать.
удобнее всего вернуть ссылку:
т.к. далее работать с классом проще.
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(){ ... }т.к. далее работать с классом проще.
Re[7]: ссылка на локальный вектор
Здравствуйте, peterbes, Вы писали:
P>Здравствуйте, uzhas, Вы писали:
P>Откуда такие сложности на пустом месте, интерфейсы, абстрактные классы, наследования, перегрузка, куча классов, если задача решается напрямую без академических извратов.
P>
P>
в одном классе мне нужен std::vector<T>, в другом T*, т.к. это две разные реализации класса, работающие на разных устройствах --- а пользователь их может выбирать.
удобнее всего вернуть ссылку:
т.к. далее работать с классом проще.
P.S. "академические навороты" нужны чтобы "застолбить" единый интерфейс
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. "академические навороты" нужны чтобы "застолбить" единый интерфейс