在继承方案

时间:2015-05-31 17:41:48

标签: c++ inheritance struct

我想为不同的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,这是空的。 有没有办法实现这样的事情,或者我做错了什么?也许这甚至是可能的,我在其他地方搞砸了,但是为什么调试器说它是空的呢? 谢谢!

1 个答案:

答案 0 :(得分:1)

您在调试器中看到的结构是空的,因为当您输入Function1时,调试器会“忘记”有关cs1的任何信息,并且只知道baseStruct(它是空的)。

如果您执行类似

的操作
import sys
你应该看到那里的一切。

但是这会解决你设计的真正问题:如果你收到了childStruct1或childStruct2,你如何告诉Funtion1?