【问题标题】:Boost Signed/Unsigned Comparsion of size_type and index of multi_array提升 size_type 和 multi_array 索引的有符号/无符号比较
【发布时间】:2012-03-04 21:06:06
【问题描述】:

我正在使用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 吗?还是会出现问题?

先谢谢了,嗯。

【问题讨论】:

    标签: c++ boost multidimensional-array integer boost-multi-array


    【解决方案1】:

    如果size_type 的大小至少与index 的大小一样大,只需将索引转换为size_type 即可进行比较。既然你之前检查过非负性,那么就不会溢出,所以是安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-28
      • 2011-07-21
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      相关资源
      最近更新 更多