如何将__declspec(align(16))与模板一起使用

How do you use __declspec(align(16)) with a template?

本文关键字:一起 declspec align      更新时间:2023-10-16

我正在尝试使我的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字节对齐