如何在 C++ 中的同一个数组中连续存储多个不同的值类型?

How would I store multiple different value types contiguously in the same array in c++?

对于我正在构建的东西,我需要能够将运行时创建的结构存储在数组中,我还希望这些结构连续存储在内存中。有没有办法将一系列对象存储在数组中,而不知道它们在编译时将是什么对象?我会知道每个可能使用的对象及其大小。基本上,当我定义其中一个数组时,我将创建一个模板,准确说明将存储哪些对象以及以什么顺序存储,之后它在数组的生命周期内不会改变,这意味着在运行时对象的步幅和位置将是已知。这可以通过分配类似 std::byte 数组的东西然后 accessing/initializing 通过使用指针将它们的内存位置设置为所需类型来分配变量来完成吗?我知道这不是最干净的解决方案,但它可以工作吗?

澄清:这将用于在运行时由自定义脚本系统定义的 ECS 组件,因此连续内存和动态分配是必须的,我意识到我需要创建 class搞定它,它就会进步,这就是它的乐趣。

所以我想我找到了答案:

std::vector<std::byte> bytes;
void addFloat(float value)
{
    size_t index = bytes.size();
    bytes.resize(bytes.size() + sizeof(float), std::byte(0));
    *(float*)(&bytes[index]) = value;
}
float readFloat(size_t index) const 
{
    return *(float*)(&bytes[index]);
}

这可以从向量中读取和写入浮点数(已测试),我假设它适用于我为其创建函数的任何值类型。所以现在我需要做的就是编写一个 class 来处理多个值类型。创建 class 后,我将计算虚拟浮点数的大小并存储它,然后我可以使用该值按索引查找浮点数。然后为了检索该结构值的一个组件,我将有另一个列表存储每个变量从结构的 0 索引开始的偏移量。所以 index + offset[variable index] = index of variable,然后我可以将该索引转换为正确的类型,这就是我的值。

编辑: 请参阅下面的评论以了解可能的改进。