Шаблонные структуры разного размера в смежной памяти в C ++ - PullRequest
0 голосов
/ 26 мая 2018

Я столкнулся со следующей проблемой.Я хочу создать шаблонную функцию, которая может обрабатывать столько структур, сколько возможно, но она идет с ограничением, что она должна иметь возможность копировать все данные непрерывно в буфер.

Так, например:

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];

1 Ответ

0 голосов
/ 27 мая 2018

В посте вы сказали:

Я хочу создать шаблонную функцию, которая сможет обрабатывать как можно больше структур

В комментарии вы сказали:

Я пишу оболочку для SSBO OpenGL, и поэтому мне требуется передать данные в графический процессор в виде непрерывного пакета.Вариант использования этой функции заключается в том, чтобы иметь возможность сжимать данные и передавать их в графический процессор

Цель имеет смысл.Стратегия для достижения этого с использованием шаблона функции, возможно, не является правильной.

Использование перегруженных функций, вероятно, является лучшим вариантом.

using BufferData = std::vector<char>;

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