[英]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.