У нас есть большая база кода, в основном написанная на C
. Мы много занимаемся числовой линейной алгеброй.
В C
мы используем double*
с длиной 3 для моделирования трехмерного вектора.
В C++
мы используем std:array<double,3>
для моделирования трехмерного вектора.
У нас есть небольшая библиотека шаблонов для перегрузки множества операторов, таких как
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?
Я думаю об использовании gsl::span
из библиотеки поддержки руководств, но мне интересно, есть ли лучшее решение.
double[3]
) или динамически выделенным (malloc(3*sizeof(double)
)? Вы можете взглянуть наarray_view
в первом случае. - person Henri Menke   schedule 16.02.2018