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);
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 我可以使用哪种数据结构来释放连续内存中的内存?
- 结构化绑定,无需复制即可获取子向量的连续元素
- C++ 中连续内存中的模板化不同大小的结构
- POD 结构(相同类型的成员):成员是否位于连续的内存位置?
- 将不相邻的内存缓冲区视为连续缓冲区的数据结构
- 是在结构连续中并排声明的变量
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 是否可以将指向已知大小的连续内存的指针转换为结构
- 递归类型真的是构建不连续的任意大小数据结构的唯一方法吗
- std::bitset 是否保证连续内存以及结构中的恒定大小(以避免填充?
- 具有快速连续范围检索的数据结构
- 为结构成员分配的内存是连续的吗?如果struct成员是数组呢?
- 是否存在连续存储的散列映射数据结构