Вот моя ситуация:
Мне дали данные в качестве указателя скажем double*
,
Я хочу обернуть это в vector
использовать библиотеку и избегать возни с указателями.
Не желая копировать весь массив, я использую вектор эталонных упаковщиков. Если я тогда хочу получить double*
назад от сказанного vector
после использования библиотеки, могу ли я получить это, бросив vector.data()
функционировать?
Например:
double* arr = new double[10];
vector<reference_wrapper<const double> > vec(arr,arr+10);
//use library in some manner.
//is this allowed? is there a more appropriate way?
//or should I forget using reference_wrappers in this way.
double* res = (double*) vec.data()
Нет, это невозможно.
double
а также reference_wrapper<const double>
совершенно не связанные типы, нет никакого способа сделать это приведение.
Если вам действительно нужно манипулировать массивами в стиле C, вам следует придерживаться std::vector<double>
и получить доступ к базовому массиву с помощью data()
функция-член, когда это необходимо.
Нет, ты не можешь этого сделать.
Вы можете сделать это (но это некрасиво):
double* arr = new double[10];
std::vector<std::reference_wrapper<double>> vec(arr, arr + 10);
//use library in some manner.
//is this allowed? is there a more appropriate way?
//or should I forget using reference_wrappers in this way.
double* res = &vec[0].operator double &();
assert(res == arr);
Я бы забыл использовать reference_wrapper вот так и вместо этого посмотреть на диапазон усиления: