繁体   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