Ho un multiray 3D e vorrei creare sezioni 2D usando le dimensioni specificate in fase di esecuzione. Conosco l'indice della dimensione degenerata e l'indice di una sezione che voglio estrarre in quella dimensione degenerata. Attualmente la brutta soluzione è la seguente:Come specificare la dimensione degenerata di boost multi_array in fase di runtime?
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]];
}
C'è un modo più bello di costruire l'oggetto index_gen? Qualcosa del genere:
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];
Sembra ogni chiamata successiva al boost :: :: indici operator [] restituisce un tipo diverso a seconda della dimensionalità (cioè il numero di chiamate precedenti), quindi non c'è modo di utilizzare un variabile singola, che può contenere l'oggetto index_gen temporaneo.
+1 per una domanda chiara che utilizza una matrice multidimensionale sana, non quella roba C! :) – Xeo