У меня есть базовый класс для штук
class piece;
и массив, содержащий производные объекты
piece* board[8][8];
Преимущество, чистый дизайн с помощью виртуальных функций. Недостаток: если мне нужно найти фигуру на доске или сравнить ее, мне придется вернуться к динамическому литью (или typeid). Это уродливо и может снизить производительность при выполнении миллионов запросов.
С другой стороны, если я создаю массив из класса одной части, в котором есть поле типа для идентификации частей, у меня нет этой проблемы (и это должно быть быстрее), но я должен делать очень уродливые операторы переключения. Я предполагаю, что, поскольку количество штук ограничено, и я не думаю, что буду делать так много переключателей, в конце концов это может быть лучшим выбором, как вы думаете?
Это для развлечения (поэтому без битборда).
Читая некоторые ответы, я думаю, что использование полей типа только для перегрузки оператора (==
, !=
, ...) может принести лучшее из обоих слов.
boost::variant
тоже выглядит очень интересно.