저는 포커 게임을 디자인하고 있습니다. 사용자가 가지고있는 카드 (항상 5 장의 카드)를위한 PokerHand 클래스가 있습니다. PokerHand는 다른 카테고리를 가지고 있습니다. Straight, Flush, Full House 등RTTI없이 추상 클래스 비교?
이제 모든 PokerHand를 비교해보고 싶습니다. 카테고리간에 정의 된 순서가 있습니다. 직선 플러시> 4 종류> 풀 하우스> ... 각 카테고리에 대해 비교를위한 뚜렷한 규칙이 있습니다. 예 : 스트레이트의 경우 높은 카드가 결정됩니다. "4 종류"의 경우 4 장의 동일한 카드가 결정됩니다.
RTTI와class PokerHand {
public:
int CompareTo(const PokerHand* another) = 0;
Category GetCagegory();
...
}
, 나는 내 질문은, RTTI가 대부분 "를 사용하는 것이 좋습니다 없다"으로 간주됩니다 고려하고 이제
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
...
}
}
로 compareTo와를 구현할 수는없는 비교를 구현하는 좋은 방법이있다 RTTI를 사용하고 있습니까?
당신은 범주를 포함하는 가상 함수를 가질 수있다,하지만 난 당신이 그것에 대해 잘못된 길을 가고 있다고 생각 ... 그리고 내가 그 정도에 대한 답을 쓸 것이다 . –
다양한 포커 손마다 각각 다른 클래스를 만드는 것은 좋지 않은 생각처럼 들립니다. 이들 중 상당수가 중복되어 있습니다. 전의. 로얄 플러시, 스트레이트 플러시, 그냥 플러시. – seand
가능한 복제본 [언제 방문자 디자인 패턴을 사용해야합니까?] (http://stackoverflow.com/questions/255214/when-should-i-use-the-visitor-design-pattern) –