我有一个3D multi_array,我想使用运行时指定的尺寸制作2D切片。我知道退化维度的索引和我想从退化维度中提取的片段的索引。目前丑陋的解决方法如下:如何在运行时指定boost multi_array的退化维?
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 ::指数:: operator []的返回一个不同类型的视维(即以前的呼叫数),所以没有办法用一个单个变量,可以容纳临时的index_gen对象。
+1对于一个明确的问题,使用一个理智的多维数组,而不是C的东西! :) – Xeo