В настоящее время я работаю над генератором шахматных движений, ориентированным на производительность, и использую множество объявлений класса 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
Как чисто работать с классом enum и uint8_t без чрезмерного static_cast? ⇐ C++
Программы на C++. Форум разработчиков
1745530664
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79591480/how-to-cleanly-work-with-enum-class-and-uint8-t-without-excessive-static-cast[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия