Привести указатель на reference_wrapper, чтобы указатель на базовый?

Вот моя ситуация:

Мне дали данные в качестве указателя скажем 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()

0

Решение

Нет, это невозможно.

double а также reference_wrapper<const double> совершенно не связанные типы, нет никакого способа сделать это приведение.

Если вам действительно нужно манипулировать массивами в стиле C, вам следует придерживаться std::vector<double>и получить доступ к базовому массиву с помощью data() функция-член, когда это необходимо.

3

Другие решения

Нет, ты не можешь этого сделать.

Вы можете сделать это (но это некрасиво):

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 вот так и вместо этого посмотреть на диапазон усиления:

http://www.boost.org/doc/libs/1_55_0/libs/range/doc/html/range/reference/utilities/iterator_range.html

0

По вопросам рекламы [email protected]