我想使用SIMD指令和編譯器內在函數優化我的Vector和Matrix類(它們是類模板)。我只想優化元素類型爲「float」的情況。使用SIMD指令需要觸摸數據成員。由於我不想擔心維護兩個單獨的類的麻煩,因此我希望能夠根據模板參數的類型啓用/禁用某些數據成員。如果適用,這種方法的另一個優點是我可以使用一般情況下的相同代碼來實現我不想爲其編寫專門化的函數。因此,我想在僞代碼實現的是:有條件地包含/排除數據成員在類模板中
template< typename T >
class Vector3 {
if type(T) == float:
union {
__m128 m128;
struct {
float x, y, z, pad;
};
};
else
T x, y, z;
endif
};
我所知道的成員函數條件包含通過使用Boost.enable_if或類似的設備是可能的。我在尋找的是有條件的數據成員。一如既往,您的幫助非常感謝。其他有效的建議也是受歡迎的。
謝謝。
退房討論:http://lists.boost.org/Archives/boost/2009/01 /147103.php – Anonymous 2009-02-21 19:36:49