1

我正在使用 aboost::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's 转换成size_type's 吗?还是会出现问题?

提前谢谢,嗯。

4

1 回答 1

1

如果 的大小size_type至少与 的大小一样大index,只需将索引转换size_type为 以进行比较。由于您之前检查了非负性,因此不会溢出,因此是安全的。

于 2012-02-13T13:31:32.427 回答