Как указать вырожденное измерение boost multi_array во время выполнения?

У меня есть 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.

10
задан Anton Daneyko 2 March 2016 в 11:17
поделиться