我们有一个大型代码库,主要用C
编写。我们做了很多数值线性代数。
在C
中,我们使用double*
,长度为3来模拟3d矢量。
在C++
中,我们使用std:array<double,3>
来建模3d矢量。
我们有一个小模板库来重载许多运算符,例如
template <class T, size_t N>
std::array<T, N> operator+(const std::array<T, N> &array1, const std::array<T, N> &array2) {
std::array<T, N> a;
for (size_t i = 0; i < N; i++) {
a[i] = array1[i] + array2[i];
}
return a;
}
问题出现了,当我们需要从C
转到C++
时(反过来说没有问题,因为我们可以使用.data()方法来访问对齐的内存)。我不喜欢制作每个类似c的3d矢量的副本,因为这在数字上会很昂贵。
我可以将pod数组视为std :: array,还是有办法以不分配新内存的方式初始化std :: array,但是使用了pod数组中的内存?
我正在考虑使用guideline support library中的gsl::span
,但我想知道是否有更好的解决方案。
答案 0 :(得分:-2)
你可以简单地施放:
double* c_array; // assign to whatever you like, length 3 or more
auto cpp_array = reinterpret_cast<std:array<double,3>*>(c_array);
这是有效的,因为std::array
绝对只是一个包含单个C数组的结构。