将指向reference_wrapper的指针转换为指向底层的指针?

时间:2014-07-29 13:22:37

标签: c++ pointers vector 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()

2 个答案:

答案 0 :(得分:3)

不,这是不可能的。

doublereference_wrapper<const double>是完全不相关的类型,没有办法执行此操作。

如果你真的需要操作C风格的数组,你应该坚持std::vector<double>,并在需要时使用data()成员函数访问底层数组。

答案 1 :(得分:0)

不,你做不到。

你可以这样做(但很难看):

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