簡體   English   中英

C ++中連續內存中的模板化可變大小結構

[英]Templated varying size structures in contiguous memory in C++

我面臨以下問題。 我想做一個模板化的函數,它可以處理盡可能多的結構,但是它帶有一個限制,那就是它必須能夠將所有數據連續復制到緩沖區中。

因此,例如:

struct A{
    int foo;
    int bar;
}

應該成為8字節的緩沖區。

struct B{
   int foo;
   vector<int> bar;
}

B.bar = vector<int>(2);

應成為具有12個字節的緩沖區。

對於B的情況,如果我已經知道B的樣子,則可以調用malloc()分配12個字節,然后將數據手動復制到此緩沖區中。

是否可以通過模板來實現此目的,還是我需要添加限制,即賦予模板化函數的任何結構必須已經連續存儲?

編輯:

這就是將B的數據復制到緩沖區的意思。

int *buffer = (int*) malloc(sizeof(int)+sizeof(int)*bar.size());

buffer[0] = foo;

for(int i=0; i<B.bar.size(), i++)
    buffer[i+1]=B.bar[i];

在帖子中,您說過

我想做一個模板化的函數,可以處理盡可能多的結構

您在評論中說:

我正在為OpenGL SSBO編寫包裝程序,因此我需要將數據作為連續數據包傳遞給GPU。 此功能的用例是通常能夠壓縮數據並將其傳遞給GPU

目標是有道理的。 使用功能模板到達那里的策略可能不是正確的選擇。

使用重載函數可能是您的最佳選擇。

using BufferData = std::vector<char>;

BufferData toBufferData(A const& a);
BufferData toBufferData(B const& b);

暫無
暫無

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

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