参数传递的不同矩阵结构

Different matrix structs passed by parameter

本文关键字:结构 参数传递      更新时间:2023-10-16

我在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);
}

我该怎么做?

提前谢谢。

如果结构都有相同的成员,那么为什么要在子类中重新定义它呢?

我怀疑答案是"不同的矩阵大小"意味着它们有一个不同静态声明大小的2D数组成员,换句话说,它们没有相同的成员。

三种解决方案。

  • 只有一个结构定义,并在运行时分配所需的矩阵大小
  • 虚拟访问器功能。使用返回矩阵的虚拟函数创建一个基结构,并仅通过它们访问矩阵
  • 为函数模板化

如果你的结构成员都有相同的名字,那么这就足够了:

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

显然,由于它是一个模板,因此函数定义必须出现在头文件中,而不是.cpp.

谢谢@Adam!我将把我得到的决议放在这里进行进一步研究。

将函数模板化确实是一种选择,但我对将其与structs一起使用感到困惑。经过昨天和今天的一些测试,我得到了这个工作版本:

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

还有一个示例结构声明:

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

非常感谢。