gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:14:42 24 4
gpt4 key购买 nike

我想为不同的 HLSL 着色器构建一个稍微灵活的继承。可悲的是,我计划的路线没有奏效,我想知道为什么。这是我正在做的:

我有一个基础结构和一些继承自它的结构:

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) ;

yoy 应该看到那里的一切。

但这涉及到您设计的真正问题:您如何在 Funtion1 中判断您收到的是 childStruct1 还是 childStruct2?

关于c++ - 在继承场景中使用基本结构作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com