メンバーごとに構造体の STL ベクトルを簡単に通過する方法はありますか? つまり、次のような構造体があるとします。
struct foo {
double x, y, z;
};
vectorstd::vector<foo> bar(20)
で、各構造体から x を選択して配列をまたがることはできますか?
私はこれを試しましたが、うまくいかないようです:
for (int i=0; i<20; ++i)
{
double xx = (&bar[0].x + i*sizeof(bar[0]))->x;
}
なぜそれがうまくいかないのですか?sizeof(bar[0])
構造体間のパディングを考慮していませんか?
注: ループ内で x にアクセスするのは本当にばかげた方法だと思いますが、このループはストライドが機能するかどうかを確認するための単なる実験です。
それが役立つ場合は、これを実行して、ポインターとストライドをコンストラクターパラメーターとして独自の内部データ型に渡すライブラリルーチンに渡すことができるようにします。もちろん、コードを AoS から SoA に変換することもできますが、絶対に必要でない限り、そうしたくありません。