这是我的情况:
我将数据作为指针说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 :(得分:3)
不,这是不可能的。
double
和reference_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,而是查看提升范围: