4
我試圖讓我的class 16-byte
與__declspec(align(16))
一致;但是它是一個模板類。如何在模板中使用__declspec(align(16))?
如果我將__declspec(align(16))
放在template關鍵字之前,它告訴我在那裏不允許使用變量屬性。
如果我把它放在class關鍵字之前,那麼整個類變得無效,所有方法都顯示錯誤。
那麼它是如何完成的呢?
我試圖讓我的class 16-byte
與__declspec(align(16))
一致;但是它是一個模板類。如何在模板中使用__declspec(align(16))?
如果我將__declspec(align(16))
放在template關鍵字之前,它告訴我在那裏不允許使用變量屬性。
如果我把它放在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字節對齊的。
如何粘貼錯誤消息和/或最小的例子? – arne
這可能有幫助,http://stackoverflow.com/questions/388934/aligning-member-variables-by-template-type或這個http://stackoverflow.com/questions/2750832/c-parent-class-alignment – Caribou