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 オブジェクトを保持できる単一の変数を使用する方法はありません。