Изменить позицию TypedArray для n-мерной матрицы - PullRequest
2 голосов
/ 11 апреля 2019

Я хочу изменить значения для матрицы, для которой ранее не был указан ее размер:

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 нежелательно ...

...