假设我有一个类T
和一个数组:
uint8_t array[sizeof(T)];
需要注意的一点是,array
可能具有可能与T
不兼容的路线。
现在问题是:有没有办法将T
存储在数组中(尽管存在对齐问题),前提是我们不会尝试使用T
做任何事情,直到我们复制它从阵列到正确对齐的存储空间?
换句话说,array
只是一个存储位置,直到我们需要访问T
,在这种情况下我们将其复制到正确的对齐方式,并使用该值并将其复制回来进入存储。
注意:
T
可以轻易复制,但不能保证T
可以轻易复制......它可以是你能想到的任何课程
所以.....这是否有可能(希望标准符合?)
答案 0 :(得分:1)
问题在不断发展,我不会通过相应修改这个答案来跟踪它。
是的,对于平易可复制的对象,您可以使用memcpy
,并在标准中的(非规范)示例中使用。
“对于普通可复制类型
T
的任何对象(基类子对象除外),无论对象是否包含T
类型的有效值,构成对象的底层字节(1.7)可以复制到char
或unsigned char
的数组中。如果将char
或unsigned char
数组的内容复制回对象,则该对象应随后保持其原始值。
对于模板代码,您可以通过std::is_trivially_copyable
检查类型是否可以轻松复制。