参数传递的不同矩阵结构
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) 深入理解线程与进程的