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

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?