присвоение многомерного элемента массива - требуется ли значение? - PullRequest
0 голосов
/ 04 ноября 2019

Для хранения изображений, которые могут быть более двухмерными, я использую класс, имеющий элементы данных

std::vector <size_t> sizes;    // dimensions of the images
std::vector <size_t> strides;  // strides to walk through the data
std::vector <double> *data;    // data points stored as 1-dimensional

, а для получения и установки значений отдельных точек у меня есть эти функции

// operator[] for positional addressing
double const* operator[] ( std::initializer_list < size_t > const& indices ) const {
   size_t const offset =
          std::inner_product ( indices.begin(), indices.end(),
                               strides.begin(),
                               0 );
   return & ( (*data) [ offset ] );
}
double* operator[] ( std::initializer_list < size_t > const& indices ) {
   size_t const offset =
          std::inner_product ( indices.begin(), indices.end(),
                               strides.begin(),
                               0 );
   return & ( (*data) [ offset ] );
}

Я могу использовать эти функции, чтобы получить данные в указанных местах и ​​распечатать их, например, , используя std::cout << my_image[{1,2,3}] для 3D-изображения, но когда я хочу их установить, например используя my_image[{1,2,3}] = 10.;, тогда я получаю ошибку lvalue required as left operand as assignment. Я последовал совету ean более раннего поста , передав указатели от оператора [] (который сам по значению), один const и один non-const. Разве нельзя установить элементы изображения с таким синтаксисом?

...