将指向reference_wrapper的指针强制转换为指向底层的指针
Cast pointer to reference_wrapper to pointer to underlying?
我的情况如下:
我得到的数据是一个指针,说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()
不可能。
double
和reference_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相关文章:
- 正在将指针转换为范围
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++:Lambda 函数指针转换的用例是什么?
- 如何将 int 指针转换为浮点指针
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- C++中数组大小未知的指针转换
- Antlr cpp 运行时 任何错误的指针转换?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- C 指针转换会导致内存访问冲突
- 模板类实例化中的指针转换无效
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 如何将 void(*)() 类型的指针转换为 void*
- 数组到指针转换期间的临时具体化
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 将基类指针转换为派生的类指针
- 应对 std::字符串中的 std::<char>指针转换后的向量
- 在编译时将函数指针转换为 std::uintptr_t
- 将基类指针转换为未知派生类指针