У меня есть 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 :: index :: operator [] возвращает другой тип в зависимости от размерности (т.е. количества предыдущих вызовов), поэтому нет возможности использовать одну переменную, которая может удерживайте временный объект index_gen.