簡體   English   中英

如何在 c++ 的同一個數組中連續存儲多個不同的值類型?

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

對於我正在構建的東西,我需要能夠將運行時創建的結構存儲在一個數組中,我還希望這些結構連續存儲在 memory 中。 有沒有辦法將一系列對象存儲在數組中,而不知道它們在編譯時將是什么對象? 我會知道所有可能使用的 object 及其尺寸。 基本上,當我定義其中一個 arrays 時,我將創建一個模板,其中包含將存儲哪些對象以及以什么順序存儲的模板,之后它在數組的生命周期內不會改變,這意味着在運行時對象的步幅和位置將是已知。 這可以通過分配諸如 std::byte 數組之類的東西,然后通過使用指針將其 memory 位置封裝為所需類型來訪問/初始化變量來完成嗎? 我知道這不是最干凈的解決方案,但它可以工作嗎?

澄清:這將用於由自定義腳本系統在運行時定義的 ECS 組件,因此必須使用連續的 memory 和動態分配,我意識到我將需要創建 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]);
}

這可以從向量中讀取和寫入浮點數(已測試),並且我假設它適用於我為其創建 function 的任何值類型。 所以現在我需要做的就是編寫一個處理多種值類型的 class。 創建 class 后,我將計算虛擬浮點數的大小並將其存儲,然后我可以使用該值按索引查找浮點數。 然后要檢索該結構值的一個組件,我將有另一個列表存儲每個變量相對於結構索引 0 的偏移量。 所以 index + offset[variable index] = index of variable,然后我可以將該索引轉換為正確的類型,這就是我的值。

編輯:請參閱下面的評論以了解可能的改進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM