将指向reference_wrapper的指针强制转换为指向底层的指针

Cast pointer to reference_wrapper to pointer to underlying?

本文关键字:指针 转换 wrapper reference      更新时间:2023-10-16

我的情况如下:

我得到的数据是一个指针,说double*

我想把它包装在vector中以使用库,并避免与指针混淆。

不想复制整个数组,我使用引用包装器的向量。如果我想在使用库后从所说的vector中获得double*,我可以通过转换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()

不可能。

doublereference_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,而是查看boost range:

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