我想使用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