【发布时间】:2018-02-16 09:25:00
【问题描述】:
我们有一个庞大的代码库,主要写在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 吗?或者有没有办法以不分配新内存但使用 pod 数组的内存的方式初始化 std::array?
我正在考虑使用guideline support library中的gsl::span,但我想知道是否有更好的解决方案。
【问题讨论】:
-
C 变体是数组 (
double[3]) 还是动态分配 (malloc(3*sizeof(double))?在第一种情况下,您可能想看看array_view。
标签: c++ memory-management stdarray