2012-02-27 100 views
2

我正在編寫一個使用MSVC++ Express 2010 for windows的軟件光柵。我正在使用SSE並需要對齊的數據結構。對於不同的基本數據類型(float,int等),我有許多單獨的向量結構,爲了方便起見,我想將它們放入一個模板化結構中。已經很好地用於對齊結構的_declspec(align(16))標記似乎不適用於模板。我有什麼選擇?這是我想什麼來實現:對齊SSE的模板向量結構

/* _declspec(align(16)) */ 
template< typename T > struct baseVector 
{ 
    T v[ 4 ]; 
}; 

typedef baseVector<float> vector, vertex, point; // etc 

我已經試過專業模板,並使用_declspec(對齊()),但是編譯器會抱怨。我也嘗試過使用#pragma pack(),但當這些結構是更高級別結構的成員時,我認爲它沒有任何對齊效果。

回答

5

declspec是在錯誤的地方。它應該在struct之後。

template<typename T> 
struct _declspec(align(16)) baseVector 
{ 
    T v[4]; 
}; 
+0

根據MSDN,也可以是之前還有:http://msdn.microsoft.com/en-us/library/83ythb65.aspx – Necrolis 2012-02-27 07:06:32

+0

這似乎沒有任何效果。我的對齊錯誤繼續。 @Necrolis:把它放在struct關鍵字之前會產生這個錯誤:錯誤C2988:無法識別的模板聲明/定義。 – lamorna 2012-02-28 04:01:32

+0

@lamourna:猜測它回落到MSDN的另一個案件有壞記錄... – Necrolis 2012-02-28 07:51:40