Переключение между массивом структур (AoS) и структурой массивов (SoA)

Одна особенность, которая играет важную роль во многих работах по проектированию, ориентированному на данные, заключается в том, что во многих случаях вместо AoS (массива структур):

struct C_AoS {
  int    foo;
  double bar;
};

std::vector<C_AoS> cs;
...
std::cout << cs[42].foo << std::endl;

более эффективно упорядочить данные в SoA (структура массивов):

struct C_SoA {
  std::vector<int>    foo;
  std::vector<double> bar;
};

C_SoA cs;
...
std::cout << cs.foo[42] << std::endl;

Теперь то, что я ищу, - это решение, которое позволило бы мне переключаться между AoS и SoA без изменения вызывающего интерфейса, то есть, что я мог, с минимальными усилиями и без дополнительных затрат времени выполнения (по крайней мере, до чрезмерной косвенности), например, позвонитеcs[42].foo; независимо от того, какое расположение данных я использую.

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

Ответы на вопрос(0)

Ваш ответ на вопрос