Mam 3D multi_array i chciałbym, aby plasterki 2D przy użyciu wymiarów określonych w czasie wykonywania. Znam indeks zdegenerowanego wymiaru i indeks kawałka, który chcę wyodrębnić w tym zdegenerowanym wymiarze. Obecnie brzydkie obejście wygląda następująco:Jak określić zdegenerowany wymiar boost multi_array w czasie wykonywania?
if (0 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[slice_index][range()][range()]];
}
else if (1 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[range()][slice_index][range()]];
}
else if (2 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[range()][range()][slice_index]];
}
Czy istnieje lepszy sposób na skonstruowanie obiektu index_gen? Coś takiego:
var slicer;
for(int i = 0; i < 3; ++i) {
if (degenerate_dimension == i)
slicer = boost::indices[slice_index];
else
slicer = boost::indices[range()];
}
Slice slice = input_array[slicer];
Wydaje każdego kolejnego połączenia do boost :: indeksy :: operator [] zwraca inny typ w zależności od wymiarowości (czyli liczbę poprzednich wywołań), więc nie ma sposobu, aby użyć pojedyncza zmienna, która może pomieścić tymczasowy obiekt index_gen.
+1 za jasne pytanie za pomocą rozsądnej wielowymiarowej tablicy, nie że C rzeczy! :) – Xeo