【问题标题】:Different matrix structs passed by parameter参数传递的不同矩阵结构
【发布时间】:2012-07-12 01:58:53
【问题描述】:

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

我该怎么做?

提前致谢。

【问题讨论】:

    标签: c++ pointers parameters struct matrix


    【解决方案1】:

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

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

    三种解决方案。

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

    如果您的结构的成员都具有相同的名称,那么就足够了:

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

    显然,因为它是一个模板,所以函数定义必须出现在您的头文件中,而不是 .cpp 中。

    【讨论】:

      【解决方案2】:

      感谢@Adam! 我将把我得到的解决方案放在这里以供进一步研究。

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

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

      还有一个示例结构声明:

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

      非常感谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-28
        • 2016-04-27
        • 1970-01-01
        相关资源
        最近更新 更多