我正在设计一个扑克游戏。将有一个 PokerHand 类用于用户拥有的牌(总是 5 张牌)。PokerHand 有不同的类别,例如顺子、同花顺、满堂彩等。
现在我希望所有的 PokerHand 都具有可比性。类别之间有一个明确的顺序:同花顺 > 同花顺 > 全屋 > ... 对于每个类别,都有不同的比较规则。例如,对于顺子,高牌决定。对于“4 of a kind”,由 4 张相同的牌决定。
class PokerHand {
public:
int CompareTo(const PokerHand* another) = 0;
Category GetCagegory();
...
}
使用 RTTI,我可以将 CompareTo 实现为
class Straight : public PokerHand {
...
}
int Straight::CompareTo(const PokerHand& another) OVERRIDE {
const Straight* s = dynamic_cast<const Straight*>(another);
if (s == NULL) {
// Not a straight. Compare category.
...
} else {
// compare high card
...
}
}
现在我的问题是,考虑到 RTTI 主要被视为“不建议使用”,有没有一种不使用 RTTI 来实现比较的好方法?