我正在使用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
吗?或者会出现问题?
先谢谢,等等。
答案 0 :(得分:1)
如果size_type
的大小至少与index
的大小一样大,则只需将索引转换为size_type
进行该比较。既然您之前检查过非负性,那么就不会溢出,所以它是安全的。