2012-02-13 5 views
1

많은 파생 형식이있는 클래스가 있고 각 파생 클래스와 연관된 고유 번호가 있습니다. 파생 된 유형과 숫자를 비교하는 간단한 방법이 있습니까?숫자로 개체 유형 확인

일부 의사 코드 :

class foo{ 
public: 
    virtual int bar(int) = 0; 
} 

class fan:foo{ 
public: 
    int bar(int num){ return num * 5;) 
} 

class fawn:foo{ 
public: 
    int bar(int num){ return num * 9;); 
} 



int main(){ 
    vector<foo*> obj; 
    for(int i = 0; i < 100; i ++){ 
     int num = rand() % 2; 
     if(num == 0) 
      obj.push_back(new fan()); 
     if(num == 1) 
      obj.push_back(new fawn()); 
    } 
} 

이 내가 원하는 것을,하지만 난 많은 두 개 이상의 클래스를 가지고 있고, 나는 많은 더 추가 할 계획입니다. 덜 장황한 방법으로이를 수행 할 수있는 방법이 있습니까?

MinGW를 사용하고 있습니다.

답변

0

아마도 원하는 것은 factory pattern입니다.

class foo 
{ 
    ... 
    static foo* Create(int num); 
} 

foo* foo::Create(int num) 
{ 
    foo* instance; 
    switch (num) 
    { 
     case 0: 
     instance = new fan(); 
     break; 
     case 1: 
     instance = new fawn(); 
     break; 

     ... 
    } 
    return instance; 
} 

이 열거 제거 할 수있는 방법은 없지만, 적어도이 방법은 정확히 한 번을 구성해야합니다 다음 사방 foo을 사용할 수 있습니다 : 기본적으로, 당신이 뭔가를 만들거야 표시됩니다.

편집 : 개인적으로 나는 당신은 당신의 파생 된 형식에 대한 고유 식별자에 대한 열거를 생성 할 수 있습니다 위의 스타일하지만 더 컴팩트 버전을

foo* foo::Create(int num) 
{ 
    if (num==0) return new fan(); 
    if (num==1) return new fawn(); 
    ... 
} 
+0

좋아요. 글쎄, 꽤 오랫동안 이것을 검토해 왔고, 가장 똑똑한 솔루션조차도 모든 타이핑이 필요합니다. 그것은 짜증나지만, 나는 이것을 몇 분 안에 대답으로 표시 할 것이다. 고맙습니다. – Kaslai

+0

@Aslai 내 편집 내용을 확인하고 싶습니다. 그것은 그 * 나쁜 * 아니 ... –

+0

어쨌든, 도와 드리겠습니다. –

0

처럼.

그러면 해당 생성자에서 설정 한이 열거 형을 포함하는 파생 클래스 내에 필드를 가질 수 있습니다. 그렇게하면 형식을 검색 할 수있는 단일 함수 만있을 수 있습니다.