2012-07-12 49 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] 
; 

非常感谢。