在继承场景中使用基结构作为函数参数

Use base struct as function argument in inheritance scenario

本文关键字:结构 函数 参数 继承      更新时间:2023-10-16

我想为不同的hsl - shaders建立一个灵活的继承。遗憾的是,我计划的路线没有成功,我想知道为什么。下面是我正在做的:

我有一个基本结构体和一些继承它的结构体:

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。有办法实现这样的东西,还是我做错了什么?也许这是可能的,我搞砸了别的地方,但为什么调试器说它是空的?谢谢你!

你在调试器中看到的结构是空的,因为当你输入Function1时,调试器'忘记'关于cs1的任何信息,只知道关于baseStruct(空的)。

如果你做像

childStruct *cs1 = reinterpret_cast<childStruct1>(&structVal) ;

你应该看看那里的一切。

但是这需要你设计的真正问题:你如何告诉,在function1内部,如果你收到了childStruct1或childStruct2?