У меня есть 3D multi_array, и я хотел бы сделать 2D-фрагменты, используя измерения, указанные во время выполнения. Я знаю индекс вырожденной размерности и индекс среза, который я хочу извлечь в этой вырожденной размерности. В настоящее время уродливое обходное решение выглядит так:
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]];
}
Есть ли более красивый способ создания объекта index_gen? Что-то вроде этого:
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];
Кажется, что каждый последующий вызов boost:: indices:: operator [] возвращает другой тип в зависимости от размерности (т.е. количества предыдущих вызовов), поэтому нет возможности использовать одну переменную, которая может содержать временный индекс_индекс объект.