微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

所以我想我找到了答案:

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]);
}

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。