2015-04-02 84 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

相关问题