2012-02-27 99 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