データ指向設計に関する多くの著作で重要な役割を果たしている 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;
、使用しているデータの配置に関係なく呼び出します。
上記の構文例は理想的なケースであり、不可能である可能性が非常に高いことに注意してください。ただし、近い近似にも非常に興味があります。テイカーはいますか?