Boost Signed / Unsigned Сравнение size_type и индекса multi_array - PullRequest
1 голос
/ 13 февраля 2012

Я использую 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 / Высота / глубина:

TileArray3D::size_type GetWidth() const;

Но TileArray3D::size_type не подписано, а TileArray3D::index -подписан.Я использую эти типы неправильно?Или есть способ обойти это?Должен ли я просто привести index к size_type?или могут возникнуть проблемы?

Заранее спасибо, ell.

1 Ответ

1 голос
/ 13 февраля 2012

Если размер size_type хотя бы равен размеру index, просто приведите индексы к size_type для этого сравнения.Поскольку вы уже проверяли наличие неотрицательности, переполнения не может быть, поэтому это безопасно.

...