2015-04-02 54 views
1

我有一個結構S,將T類型的兩個固定大小的數組打包在一起。reinterpret_cast結構到一個固定大小的數組

template<typename T> 
struct S { 
    array<array<T, 20>, 10> x1; 
    array<T, 10> x2; 
}; 

我想大小210的我試圖用reinterpret_castT類型元素的一維數組的引用,但是編譯器不會接受這樣的:

S<T> s; 
array<T, 210>& x = *reinterpret_cast<S*>(&s); 

我知道this作品:

S<T> s; 
    T* x = reinterpret_cast<T*>(&s); 

但有一種方式來獲得從該結構的固定大小的一維數組的引用?我嘗試使用#pragma pack(pop, 1)沒有成功。

+0

您的演員似乎...懷疑。你爲什麼要這樣?這個問題似乎是[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – 2015-04-02 15:37:21

+0

我有幾種不同的類型(機器學習模型),它們有很多參數。爲了有效地使用自己的參數,每種類型都將它們打包在一個或多個多維數組中。另外我有一個通用函數,可以優化任何數量的參數,而不管它們來自哪個模型。 – 2015-04-02 15:43:53

+0

注意嚴格的鋸齒規則。 – Lingxi 2015-04-02 15:51:46

回答

3

reinterpret_cast<array<T, 210>&>(s)應該這樣做,如果這真的是你想要的。

它應該是明確的,因爲這些是標準佈局類型(假設T是)。但是你在薄冰上滑冰。

+0

噢......當然。我只是沒有看到它。謝謝你的時間。是的,只有在'is_standard_layout '時才允許模板實例化。 – 2015-04-02 15:55:40