2012-07-12 3 views
0

구조체를 매개 변수로 가져와야하는 GenericObject 클래스의 함수가 있지만이 구조체는 해당 자식 클래스에서 제공합니다. 이러한 모든 구조체는 동일한 멤버를 갖지만 서로 다른 크기의 매트릭스를 갖습니다.다른 행렬 구조체가 매개 변수로 전달되었습니다.

void GenericObject::SetTexture(struct* _myStructOffset) 
{ 
    for (int i = 0; i < stateNumber; i++) 
    { 
     for (int j = 0; j < indexNumber; j++) 
     { 
      SetTextureOffset(i, j, _myStructOffset[i][j]->xTex0, _myStructOffset[i][j]->xTex1, _myStructOffset[i][j]->yTex0, _myStructOffset[i][j]->yTex1, 100/*_myGenericOffset->imageW*/, 100/*_myGenericOffset->imageH*/); 
     } 
     GetMyAnimatedSprite()->SetAnimationToList(); 
    } 
} 

구조체 예 :

struct ButtonsData 
    { 
     float xTex0; 
     float yTex0; 
     float xTex1; 
     float yTex1; 
    } 
    ButtonOffset1[3][1] 
    ; 

그리고이 같은 몇 가지 방식으로 작동한다 :

void Button::SetTexture() 
{ 
    GenericObject::SetTexture(&ButtonOffset1); 
} 

어떻게이 기능은 구조체 (매개 변수 분명히 잘못을)받을

나는 그것을 만든다? 사전에

감사합니다.

답변

1

구조체에 모두 동일한 멤버가있는 경우 왜 자식 클래스에서 재정의합니까?

"다른 행렬 크기"는 정적으로 선언 된 크기가 다른 2D 배열 멤버가 있다는 의미입니다. 즉, 동일한 멤버가 없습니다.

세 가지 솔루션.

  • 하나만 구조체 정의가 런타임
  • 가상 액세서 함수에 필요한 매트릭스 크기를 할당. 행렬을 반환하는 가상 함수가있는 기본 구조체를 만들고 그 행렬을 통해서만 행렬에 액세스하십시오.
  • 템플릿 기능. 당신의 구조체 '멤버 모두 같은 이름이있는 경우

, 그럼 그냥이 충분해야한다 :

template <typename STRUCT_T> 
void GenericObject::SetTexture(struct STRUCT_T *_myStructOffset) 
{ 
... 
} 

을 분명히 함수 정의 대신의 헤더 파일에 표시하는 템플릿이기 때문에. cpp.

0

감사합니다. @Adam! 나는 더 깊은 연구를 위해 얻은 결의안을 여기서 보겠다.

템플릿에 함수는 실제로 옵션 이었지만 구조체와 함께 사용하는 것에 대해 혼란스러워했습니다.

template <typename STRUCT_T> 
void SetTexture(STRUCT_T _myStructOffset[][]) 
{ 
    ... 
} 

을 그리고 예를 들어 구조체 선언 : 몇 가지 테스트 어제와 오늘 후 나는이 작업 버전에 도착

struct Buttons 
{ 
    float xTex0; 
    float yTex0; 
    float xTex1; 
    float yTex1; 
} 
ButtonOffset1[3][1] 
; 

고마워요.

관련 문제