在继承场景中使用基本结构作为函数参数
Use base struct as function argument in inheritance scenario
我想为不同的 HLSL-Shaders 构建一个稍微灵活的继承。可悲的是,我计划的路线没有奏效,我想知道为什么。这是我正在做的事情:
我有一个 base-struct 和一些继承自它的结构:
struct baseStruct {};
struct childStruct1 : public baseStruct {
int someInt1;
int someInt2;
}
struct childStruct2 : public baseStruct {
float someFloat1;
bool someBool1;
}
还有一个抽象 class 带有像这样声明的纯虚函数:
class BaseClass {
virtual void Function1(baseStruct& structVal) = 0;
virtual void Function2(baseStruct& structVal) = 0;
}
这是根据child class:
class ChildClass {
void Function1(baseStruct& structVal);
void Function2(baseStruct& structVal);
}
现在我希望能够调用具有不同结构的这些函数中的任何一个,这些函数具有 baseStruct
作为 parent,如下所示:
childStruct1 cS1;
cS1.someInt1 = 5;
CS1.someInt2 = -3;
Function1(cS1);
编译器没有抱怨,但是当我单步执行我的程序时,我注意到该结构在函数之前填充了值,但是一旦我单步执行我的函数,该结构就为空。现在我的第一印象是,发生这种情况是因为它将 "casted" 变为空的 baseStruct
。
有没有办法实现这样的目标,或者我做错了什么?也许这甚至是可能的,我在其他地方搞砸了,但是为什么调试器说它是空的?
谢谢!
您在调试器中看到的结构是空的,因为当您输入 Function1 时,调试器 'forgets' 任何关于 cs1 的信息并且只知道 baseStruct(它是空的)。
如果你做类似
childStruct *cs1 = reinterpret_cast<childStruct1>(&structVal) ;
你应该在那里看到一切。
但这涉及到您设计的真正问题:在 Funtion1 中,您如何判断收到的是 childStruct1 还是 childStruct2?
我想为不同的 HLSL-Shaders 构建一个稍微灵活的继承。可悲的是,我计划的路线没有奏效,我想知道为什么。这是我正在做的事情:
我有一个 base-struct 和一些继承自它的结构:
struct baseStruct {};
struct childStruct1 : public baseStruct {
int someInt1;
int someInt2;
}
struct childStruct2 : public baseStruct {
float someFloat1;
bool someBool1;
}
还有一个抽象 class 带有像这样声明的纯虚函数:
class BaseClass {
virtual void Function1(baseStruct& structVal) = 0;
virtual void Function2(baseStruct& structVal) = 0;
}
这是根据child class:
class ChildClass {
void Function1(baseStruct& structVal);
void Function2(baseStruct& structVal);
}
现在我希望能够调用具有不同结构的这些函数中的任何一个,这些函数具有 baseStruct
作为 parent,如下所示:
childStruct1 cS1;
cS1.someInt1 = 5;
CS1.someInt2 = -3;
Function1(cS1);
编译器没有抱怨,但是当我单步执行我的程序时,我注意到该结构在函数之前填充了值,但是一旦我单步执行我的函数,该结构就为空。现在我的第一印象是,发生这种情况是因为它将 "casted" 变为空的 baseStruct
。
有没有办法实现这样的目标,或者我做错了什么?也许这甚至是可能的,我在其他地方搞砸了,但是为什么调试器说它是空的?
谢谢!
您在调试器中看到的结构是空的,因为当您输入 Function1 时,调试器 'forgets' 任何关于 cs1 的信息并且只知道 baseStruct(它是空的)。
如果你做类似
childStruct *cs1 = reinterpret_cast<childStruct1>(&structVal) ;
你应该在那里看到一切。
但这涉及到您设计的真正问题:在 Funtion1 中,您如何判断收到的是 childStruct1 还是 childStruct2?