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