gpt4 book ai didi

c++ - 从类中返回内存的建议

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:35 24 4
gpt4 key购买 nike

我有一个类应该保存像素数据( float 代表位置, float 代表颜色)。我正在尝试在数据成员中使用 C++ 样式(数据保存在 std::array<float, N> 而不是普通的 C 数组中)。该类还有其他 getter、setter 和函数,旨在成为填充这些字段的“助手”。

现在我需要创建一个 OpenGL 顶点数据缓冲区,我应该在其中写出

  4 floats for xyzw
4 floats for rgba
2 floats for UV coords

按照这个顺序。我想知道我应该怎么做。我试过

class MyVertexData {
std::array<float, 4> pos;
std::array<float, 4> rgba;
std::array<float, 2> uv;
public:
void writeData(float *ptrToMemory) {
if(ptrToMemory == nullptr)
throw std::runtime_exception("Null pointer");

std::array<float, 10> output;

output= {
pos[0], pos[1], pos[2], pos[3],
rgba[0], rgba[1], rgba[2], rgba[3],
uv[0], uv[1]
};

memcpy(memory, out.data(), 10 * sizeof(float));
}
};


// Caller code
std::vector<float[10]> buffer(4);
vertex0.writeElements(buffer[0]);
vertex1.writeElements(buffer[1]);
vertex2.writeElements(buffer[2]);
vertex3.writeElements(buffer[3]);

但是这种方法有两个问题:

  1. 我需要相信调用者已分配内存来存储 10 个 float
  2. 没有 C++11+ 签名,我只是得到一个浮点指针

我不能只返回一个 std::unique_ptr因为我需要一个连续的内存区域 ( buffer ) 来存储元素,但我还需要区分不同的元素(这也会使代码更具可读性)。

返回一个智能指针或类似的东西会很好,我可以轻松地将其内存“连接”到其他元素,这样我就可以安全地将这些东西传递给 OpenGL。

最佳答案

CppCoreGuidelines引入 span,它是连续元素的 View ,因此您可以使用如下内容:

void writeData(gsl::span<float, 10> ptrToMemory)

表达意图。

关于c++ - 从类中返回内存的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396091/

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