我在GenericObject类中有一个函数需要将一个struct作为参数,但是这个结构将由它的子类提供。所有这些结构具有相同的成员,但它们将具有不同的矩阵大小。
此函数获取结构(参数明显错误):
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);
}
我该怎么做?
提前致谢。
答案 0 :(得分:1)
如果结构都具有相同的成员,那么为什么要在子类中重新定义它?
我怀疑答案是“不同的矩阵大小”意味着它们有一个二维数组成员,它是一个不同的静态声明大小,换句话说它们没有相同的成员。
三种解决方案。
如果你的结构成员都有相同的名字,那么这就足够了:
template <typename STRUCT_T>
void GenericObject::SetTexture(struct STRUCT_T *_myStructOffset)
{
...
}
显然,因为它是一个模板,函数定义必须出现在头文件而不是.cpp中。
答案 1 :(得分:0)
谢谢@Adam! 我将把这个决议放在这里进一步研究。
模板功能真的是一个选项,但我对使用它与结构感到困惑。经过昨天和今天的一些测试后,我得到了这个工作版本:
template <typename STRUCT_T>
void SetTexture(STRUCT_T _myStructOffset[][])
{
...
}
示例结构声明:
struct Buttons
{
float xTex0;
float yTex0;
float xTex1;
float yTex1;
}
ButtonOffset1[3][1]
;
非常感谢。