c - 如何传递包含指针数组或静态数组的结构体
问题描述
我将包含 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++ 中是否有另一种解决问题的简便方法?(我愿意使用不使用虚函数的特性)。
我的第一个想法是创建某种包装实体,但这听起来太复杂了。我应该接受必须复制代码吗?
解决方案
推荐阅读
- c# - 为什么这种短路在 linq to sql 查询中不起作用?
- api - 通过 HTTPie 在 Powershell 中使用字符串中的空格 POST API 命令出错
- c# - TCP/IP 端口突然停止监听
- ios - 何时从 Firebase 加载数据
- numpy - 如何使用 ROI 从我想要的点绘制一个矩形?
- .net - 变量在当前上下文中不可读,而它在当前上下文中
- apiblueprint - 重复具有不同值的 MSON 数据结构
- javascript - Web 浏览器崩溃为 Uint8ClampedArray JavaScript 中的图像数据调用 REST
- rails-activestorage - ActiveStorage::IntegrityError 何时引发?
- android - 我有 5 个班级,并通过抽屉边在它们之间导航