Re[4]: ссылка на локальный вектор
От: sci_reseacher  
Дата: 16.05.16 12:40
Оценка:
Здравствуйте, uzhas, Вы писали:

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



_>>А как можно вернуть ссылку на std::vector<float> в данной ситуации, когда имеется float *?

U>зачем вам ссылка нужна? какая задача? возвращайте по значению

U>вот так:

U>
U>vector<float> getVector(){
U>  vector<float> tmp(X_,X_+size);
U>  return tmp;
U>}

U>vector<float> a1 = getVector(); // <-- valid
U>const vector<float>& a2 = getVector(); // <-- valid as well
U>


нужно сделать наследников D и C класса B, таких, что в одном данные хранятся в std::vector<T>, а в другом классе T* указывает на эти данные.

struct B {
    virtual const vector<float> &  getX() = 0 ;
};


struct C: public B {
    float *X;
    int size;
//    vector<float>  getX(){
//    vector<float> tmp(X,X+size);
//    return tmp;
//    }
};

struct D: public B {
    vector<float> X;
    const vector<float>  & getX(){
        return X;
    }
};


наверное лучший вариант переделать базовый класс

struct B {
    virtual vector<float> getX() = 0 ;
};

struct C: public B {
    float *X;
    int size;

    virtual vector<float> getX(){
        vector<float> tmp(X,X+size);
        return tmp;
    }
};

struct D: public B {
    vector<float> X;
    virtual vector<float>  getX(){
        return X;
    }
};


и использовать так
const vector<float> & w = d.getX(); // только вот здесь для D d нет ли лишней копии вектора? всегда работает return value optimization?
Отредактировано 16.05.2016 12:58 sci_reseacher . Предыдущая версия . Еще …
Отредактировано 16.05.2016 12:56 sci_reseacher . Предыдущая версия .
Отредактировано 16.05.2016 12:54 sci_reseacher . Предыдущая версия .
Отредактировано 16.05.2016 12:41 sci_reseacher . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.