我正在使用 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 吗?还是会出现问题?
提前谢谢,嗯。