【发布时间】:2009-02-21 09:31:36
【问题描述】:
我想使用 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 或类似工具可以有条件地包含成员函数。不过,我正在寻找的是有条件地包含数据成员。与往常一样,非常感谢您的帮助。也欢迎其他有效的建议。
谢谢。
【问题讨论】: