首页 > 解决方案 > 如何传递包含指针数组或静态数组的结构体

问题描述

我将包含 openGL 顶点缓冲区和数据的结构传递给在 GPU 上绑定和更新日期的便利函数。现在,我有以下内容:

struct VertexBufferData {
    VertexBuffer vbo;
    ElementBuffer ebo;
    size_t    v_cap;
    size_t    v_count;
    size_t    i_cap;
    size_t    i_count;
    GLfloat*  vertices; // dynamically allocated
    GLuint*   indices; // dynamically allocated
};

然而有时我在编译时知道一些顶点和索引缓冲区的大小,在这种情况下我想这样做:

struct VertexBufferData {
    VertexBuffer  vbo;
    ElementBuffer ebo;
    size_t    v_cap;
    size_t    v_count;
    size_t    i_cap;
    size_t    i_count;
    GLfloat   vertices[SOME_CONST_SIZE_1];
    GLuint    indices[SOME_CONST_SIZE_2];
};

结构实际上是相同的,但是静态数组和指针/动态分配的内存不同并且需要不同的类型,这意味着我需要复制大量代码(函数和其他结构,例如void gl_bind_buffers_and_upload_data(VertexBufferData* vbd, GLenum usage) )只是为了支持结构的两个版本.

有没有办法将这两个结构视为相同类型或优雅的解决方法,而无需切换到 C++ 的继承(我试图避免)。我想将数据保留为 POD。模板参数化并不能解决问题,但是在 C++ 中是否有另一种解决问题的简便方法?(我愿意使用不使用虚函数的特性)。

我的第一个想法是创建某种包装实体,但这听起来太复杂了。我应该接受必须复制代码吗?

标签: cstructtypes

解决方案


推荐阅读