是否有一種簡單的方式來通過成員跨越結構的STL向量?換句話說,如果我有這樣一個結構:跨越結構向量的成員
struct foo {
double x, y, z;
};
在載體std::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,但這個循環只是一個實驗,看看跨步是否奏效。
如果有幫助,我想這樣做,這樣我就可以將bar傳遞給庫例程,它接受一個指針和一個stride作爲構造函數參數到它自己的內部數據類型。當然,我可以將我的代碼從AoS轉換爲SoA,但除非必須,否則我不想那樣做。
sizeof將不包含填充,因爲填充可以取決於數據結構之前和之後的內容。 你也許可以用「int size =(char *)&bar [1] - (char *)&bar [0]」來代替?不知道這是多麼合法,但這是爲什麼這是一個評論,而不是一個答案。 – jcoder
每當我看到「聰明」的東西時,我都想知道爲什麼有人會想要做些什麼 - 更隱晦和無法維護。 – Chad
再一次,我真的需要開始和大步走到我無法控制的第三方圖書館。循環只是一個經驗性的測試,以確認它的工作原理,而不是試圖變得聰明。 – Fadecomic