我正在尝试使用std :: aligned_storage模式实现简单静态数组的16字节对齐:
- #include <type_traits>
- int main()
- {
- const size_t SIZE = 8;
- using float_16 = std::aligned_storage<sizeof(float) * SIZE,16>::type;
- float_16 mas;
- new(&mas) float[SIZE];//Placement new. Is this necessary?
- mas[0]=1.f;//Compile error while attempting to set elements of aligned array
- }
我得到以下编译错误:
no match for «operator[]» in «mas[0]»
然后我尝试使用显式指针转换:
- float* mas_ = reinterpret_cast<float*>(mas);
但这也会产生编译错误:
invalid cast from type «float_16 {aka std::aligned_storage<32u,
16u>::type}» to type «float*»
任何人都可以建议我如何正确使用std :: aligned_storage对齐静态数组?
解决方法
你可以使用:
- float* floats = new (&mas) float[SIZE];
然后你可以使用:
- floats[0] = 1.f;
根本没有reinterpret_cast