2
比方说,我有一个结构如何使用C union将多个命名变量和另一个更大的命名变量等同起来?
struct vector_struct {
float x;
float y;
float z;
} vector;
我希望能够解决在x,y和z值vector.x
等,它们上面的代码可以让我做。然而,为了便于快速算法,在一个明确的方式SSE SIMD指令,我想做到以下几点:
union vector_union {
struct vector_struct float_values;
__m128d packed_values;
} vector;
现在,如果我想要做的向量SIMD指令,我可以只使用vector.packed_values
作为各种SIMD指令的参数(如乘法)。然而,这看起来很丑陋,因为如果我想的x
的价值,我会写
foo = vector.float_values.x
,而不是仅仅
foo = vector.x
那么,我的问题是,如果有什么办法使union
联系多个命名变量与另一个单个命名变量。像
union vector_union {
float values[3];
__m128d packed_values;
} vector;
东西,除非vector.values[0]
可以被称为vector.x
,vector.values[1]
可以为vector.y
称,等
非常好!我不知道匿名结构已被添加!非常感谢你! – wyager 2013-03-09 21:46:38