2013-06-28 21 views
4

我試圖讓我的class 16-byte__declspec(align(16))一致;但是它是一個模板類。如何在模板中使用__declspec(align(16))?

如果我將__declspec(align(16))放在template關鍵字之前,它告訴我在那裏不允許使用變量屬性。

如果我把它放在class關鍵字之前,那麼整個類變得無效,所有方法都顯示錯誤。

那麼它是如何完成的呢?

+2

如何粘貼錯誤消息和/或最小的例子? – arne

+0

這可能有幫助,http://stackoverflow.com/questions/388934/aligning-member-variables-by-template-type或這個http://stackoverflow.com/questions/2750832/c-parent-class-alignment – Caribou

回答

0

此實現可能回答了這個請求:

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字節對齊的

相關問題