将reinterpret_cast结构转换为固定大小数组

3

我有一个结构体S,它打包了两个固定大小、类型为T的数组。

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

我希望获取一个大小为210、元素类型为T的一维数组的引用。我尝试使用reinterpret_cast,但编译器不允许这样做:

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

我知道 这个 是可行的:

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

但是有没有一种方法可以从该结构中获取固定大小的一维数组的引用?我尝试使用 #pragma pack(pop, 1),但没有成功。


你的类型转换看起来有些可疑。为什么你想要那个?这个问题似乎是一个“XY 问题”。(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - Some programmer dude
我有几种不同类型的机器学习模型,每个模型都有一组大量的参数。为了有效地使用它们自己的参数,每种类型都将它们打包在一个或多个多维数组中。此外,我还有一个通用函数,可以优化任意数量的参数,无论这些参数来自哪个模型。 - Tudor Berariu
1
请注意严格别名规则。 - Lingxi
1个回答

4
如果确实需要,reinterpret_cast<array<T,210>&&>(s)应该可以完成此操作。由于这些是标准布局类型(假设T是),因此应该定义良好。但你要小心谨慎。

哦...当然。我刚没看到。谢谢你的时间。是的,我只会允许模板实例化,如果 is_standard_layout<T> - Tudor Berariu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接