Как чисто работать с классом enum и uint8_t без чрезмерного static_cast?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как чисто работать с классом enum и uint8_t без чрезмерного static_cast?

Сообщение Anonymous »

В настоящее время я работаю над генератором шахматных движений, ориентированным на производительность, и использую множество объявлений класса Enum, таких как квадрат, файл, ранга, цвет, купюр, кастли, направление и т. Д. Это приводит к множеству повторяющихся и уродливых Static_cast (...) по всему коду, как в следующем mre: < /p>
#include
#include
#include
#include

using u8 = uint8_t;
using Bitboard = uint64_t;

enum class File : u8 {
FA, FB, FC, FD, FE, FF, FG, FH, NB
};

enum class Rank : u8 {
R1, R2, R3, R4, R5, R6, R7, R8, NB
};

enum class Square : u8 {
A1, B1, C1, D1, E1, F1, G1, H1,
A2, B2, C2, D2, E2, F2, G2, H2,
A3, B3, C3, D3, E3, F3, G3, H3,
A4, B4, C4, D4, E4, F4, G4, H4,
A5, B5, C5, D5, E5, F5, G5, H5,
A6, B6, C6, D6, E6, F6, G6, H6,
A7, B7, C7, D7, E7, F7, G7, H7,
A8, B8, C8, D8, E8, F8, G8, H8,
NB, FIRST = A1, LAST = H8
};

enum class Color : u8 { WHITE, BLACK, NB };
enum class PieceType : u8 { PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, NB };

constexpr File getFile(Square sq) {
return static_cast(static_cast(sq) % 8);
}

constexpr Rank getRank(Square sq) {
return static_cast(static_cast(sq) / 8);
}

std::array squareDistance{};
std::array pawnAttacks{};
std::array pseudoAttacks{};

void precomputeSquareDistance() {
for (u8 s1 = static_cast(Square::FIRST); s1

Подробнее здесь: https://stackoverflow.com/questions/795 ... tatic-cast
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»