gpt4 book ai didi

c++ - 是否可以将派生类数组截断为 C++ 中的基类数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:16 30 4
gpt4 key购买 nike

我正在制作一个使用 OpenGL 的应用程序,目前存储一个对象数组,这些对象应该在每一帧中呈现,看起来像这样:

class Object {
private:
float x;
float y;
public:
void func1();
void func2();
...
};

我希望能够从这些对象的数组中创建一个顶点缓冲区对象,但我不能简单地传递数组,因为该类包含 glBufferData 没有的附加函数'没想到。

是否可以像这样分离对象类:

class baseObject {
public:
float x;
float y;
};

class derivedObject : public baseObject {
public:
float x;
float y;
void func1();
void func2();
...
};

然后使用 static_cast 或其他方式将 derivedObjects 数组转换为 baseObjects 数组,然后可以将其传递给 glBufferData ?或者是遍历对象数组的唯一方法,将 xy 变量提取到一个单独的数组中,然后可以将其传递给 glBufferData?

最佳答案

Object 类中的函数实际上对对象的布局没有任何贡献。尽管规范不保证这一点,但在所有主要编译器上,对象的内存表示只是它的字段。 (但是,如果您将虚函数添加到混合中,则事实并非如此)。在你的情况下,你的 Object 类看起来与内存中的这个 struct 没有区别:

struct JustObjectFields {
float x, y;
};

因为当您删除成员函数时,这就是您剩下的。

这样做的原因是成员函数通常被编译成常规函数,这些函数将 this 指针作为显式的第一个参数。此代码独立于该类的任何一个实例,因此类大小不受它们的影响。简而言之,您应该能够在根本不使用继承的情况下做到这一点。只需使用您的原始 Object 类。

关于c++ - 是否可以将派生类数组截断为 C++ 中的基类数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926287/

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