我想为不同的HLSL-Shaders构建一个有点灵活的继承。可悲的是,我的计划路线没有用,我想知道为什么。这就是我在做的事情:
我有一个base-struct和一些继承自它的结构:
struct baseStruct {};
struct childStruct1 : public baseStruct {
int someInt1;
int someInt2;
}
struct childStruct2 : public baseStruct {
float someFloat1;
bool someBool1;
}
一个带有纯虚函数的抽象类,声明如下:
class BaseClass {
virtual void Function1(baseStruct& structVal) = 0;
virtual void Function2(baseStruct& structVal) = 0;
}
这是相应的儿童班:
class ChildClass {
void Function1(baseStruct& structVal);
void Function2(baseStruct& structVal);
}
现在我想能够调用具有不同结构的那些函数,其中baseStruct
作为父类,如下所示:
childStruct1 cS1;
cS1.someInt1 = 5;
CS1.someInt2 = -3;
Function1(cS1);
编译器没有抱怨,但是当我单步执行我的程序时,我注意到结构在函数之前填充了值,但是一旦我进入我的函数,结构就是空的。现在我的第一印象是,发生这种情况是因为它被“转换”为baseStruct
,这是空的。
有没有办法实现这样的事情,或者我做错了什么?也许这甚至是可能的,我在其他地方搞砸了,但是为什么调试器说它是空的呢?
谢谢!
答案 0 :(得分:1)
您在调试器中看到的结构是空的,因为当您输入Function1时,调试器会“忘记”有关cs1的任何信息,并且只知道baseStruct(它是空的)。
如果您执行类似
的操作import sys
你应该看到那里的一切。
但是这会解决你设计的真正问题:如果你收到了childStruct1或childStruct2,你如何告诉Funtion1?