我正在努力使我class 16-byte
与__declspec(align(16))
; 但是它是一个模板类。
如果我放在__declspec(align(16))
模板关键字之前,它会告诉我变量属性是不允许的。
如果我将它放在 class 关键字之前,整个类将变得无效,并且所有方法都会显示错误。
那么它是如何完成的呢?
我正在努力使我class 16-byte
与__declspec(align(16))
; 但是它是一个模板类。
如果我放在__declspec(align(16))
模板关键字之前,它会告诉我变量属性是不允许的。
如果我将它放在 class 关键字之前,整个类将变得无效,并且所有方法都会显示错误。
那么它是如何完成的呢?
这个实现可能会回答这个请求:
template <class T, std::size_t Align>
struct alignas(Align) aligned_storage
{
T a;
T b;
};
template <class T, std::size_t Align>
struct aligned_storage_members
{
alignas(Align) T a;
alignas(Align) T b;
};
int main(int argc, char *argv[]) {
aligned_storage<uint32_t, 8> as;
std::cout << &as.a << " " << &as.b << std::endl;
aligned_storage_members<uint32_t, 8> am;
std::cout << &am.a << " " << &am.b << std::endl;
}
// Output:
0x73d4b7aa0b20 0x73d4b7aa0b24
0x73d4b7aa0b30 0x73d4b7aa0b38
第一个结构(当然可以定义为一个类)是8 字节对齐的,而第二个结构本身不是对齐的,而是每个成员都是 8 字节对齐的。