1

私は a を使用してboost::multi_arrayおり、特定の座標が範囲内にあるかどうかを確認する必要がある場合は、次のようにします。

bool MapData::IsWithinBounds(TileArray3D::index x, TileArray3D::index y, TileArray3D::index z) const {
    return (x >= 0 and x < GetWidth()) and
           (y >= 0 and y < GetHeight()) and
           (z >= 0 and z < GetDepth());
}

は次のようにTileArray3D定義されます。

typedef boost::multi_array<TileID, 3> TileArray3D;

そしてTileID次のとおりです。

BOOST_STRONG_TYPEDEF(int, TileID);

GetWidth/Height/depth のシグネチャは次のとおりです。

TileArray3D::size_type GetWidth() const;

しかしTileArray3D::size_type、署名されておらず、TileArray3D::index署名されています。これらの型を間違った方法で使用していますか? または、これを回避する方法はありますか?を にキャストする必要がありindexますsize_typeか? または問題が発生する可能性がありますか?

前もってありがとう、エル。

4

1 に答える 1

1

のサイズが のサイズとsize_type少なくとも同じ大きさの場合は、その比較のためindexにインデックスを にキャストするだけです。size_type以前に負でないことを確認したので、オーバーフローはあり得ないので安全です。

于 2012-02-13T13:31:32.427 に答える