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