10

データ指向設計に関する多くの著作で重要な役割を果たしている 1 つの特徴は、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;、使用しているデータの配置に関係なく呼び出します。

上記の構文例は理想的なケースであり、不可能である可能性が非常に高いことに注意してください。ただし、近い近似にも非常に興味があります。テイカーはいますか?

4

1 に答える 1