2012-07-12 53 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

如果結構都具有相同的成員,那麼爲什麼要在子類中重新定義呢?

我懷疑答案是「不同的矩陣大小」意味着他們有一個二維數組成員,這是一個不同的靜態聲明大小,換句話說他們沒有相同的成員。

三種解決方案。

  • 只有一個結構定義並在運行時
  • 虛擬存取器函數分配所需要的矩陣大小。使用返回矩陣的虛函數創建一個基礎結構,並且只通過它們訪問矩陣。
  • 模板函數。

如果你的結構的成員都具有相同的名稱,那麼就這應該是足夠了:

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

明顯,因爲它是一個模板函數定義必須出現在你的頭文件,而不是。 CPP。

0

Thanks @Adam! 我會在這裏讓我得到進一步研究的決議。

要模板的功能是一個真正的選擇,但我很困惑與結構使用它。一些測試,昨天和今天之後,我得到了這個工作版本:

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

和示例結構聲明:

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

非常感謝。