参数传递的不同矩阵结构

Posted

技术标签:

【中文标题】参数传递的不同矩阵结构【英文标题】: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);

我该怎么做?

提前致谢。

【问题讨论】:

【参考方案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]
;

非常感谢。

【讨论】:

以上是关于参数传递的不同矩阵结构的主要内容,如果未能解决你的问题,请参考以下文章

结构体(结构体嵌套结构体指针结构体参数传递)

(1) 如何向线程对应的函数传递参数?一个参数如何传递,多个参数如何传递? (2) 深入理解线程与进程的

传递参数以更改#define变量[重复]

如何在 pthread_create() 函数中将矩阵作为参数传递?

在 C 中将多维数组作为参数传递

如何将不同类型的结构体作为一个函数的参数?