Я хочу изменить значения для матрицы, для которой ранее не был указан ее размер:
ArrayFactory factory;
std::vector<size_t> position = {3, 14, 2, 23};
Array mat_data = factory.createArray<double>({30, 30, 30, 30});
Reference<TypedArray<double>> temp = mat_data[position[0]]; //fails here
for (int i = 1; i < positions.size(); ++i)
mat_temp = mat_temp[positions[i]];
mat_temp[positions.back()] = getMyValue(position);
Это дает мне следующую ошибку:
Недостаточно индексов
Я знаю, что могу сделать это:
mat_data[3][14][2][23] = getMyValue(position);
Но я не могу жестко закодировать это, потому что я не знаю размер position
, когда алгоритм запускается.
Фактическое решение, удаляющее private
, которое скрывает ArrayElementRef(ArrayElementRef<is_const_ref>&& rhs) MW_NOEXCEPT
на ArrayElementRef.hpp
:
ArrayElementRef<false> getElementRef(ArrayElementRef<false> elem, std::vector<size_t>& position, size_t pos) {
if (pos >= position.size() - 1)
return std::move(elem);
return getElementRef(elem[position[pos]], position, ++pos);
}
А потом:
ArrayFactory factory;
std::vector<size_t> position = {3, 14, 2, 23};
Array mat_data = factory.createArray<double>({30, 30, 30, 30});
ArrayElementRef<false> mat_temp = getElementRef(mat_data[position[0]], positions, 1);
mat_temp[position.back()] = getMyValue(position);
Но удаление этого private
нежелательно ...