0

这是我的情况:

我得到数据作为指针说double*

我想将其包装在 avector中以使用库,并避免弄乱指针。

不想复制整个数组,我使用引用包装向量。如果我想在使用库double*后从所说的得到返回,我可以通过转换函数来得到这个吗?vectorvector.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()
4

2 回答 2

3

不,这是不可能的。

double并且reference_wrapper<const double>是完全不相关的类型,没有办法进行这种转换。

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

于 2014-07-29T13:55:31.627 回答
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

于 2014-07-29T13:51:28.947 回答