2011-12-31 90 views
7

我正在将我们的reign SDK从C#移植到D,并将D-Atizing从C#转换为D.目前正在使用Vector2数学模块。D性能:union vs @property

下面两个结构之间是否会有性能差异?我的基准测试显示相同的性能,但我想获得一个位专家的见解的:)

struct Vector2(T) 
{ 
    T x, y; 
    @property T u() { return x; } 
    @property T v() { return y; } 
    @property void u(T value) { x = value; } 
    @property void v(T value) { y = value; } 
} 

struct Vector2(T) 
{ 
    union { T x, u; } 
    union { T y, v; } 
} 

很显然,我想用工会的语法简单。但是,使用它们会有什么不可预见的缺陷吗?我不熟悉他们的低级细节。

在附注上,我添加了类似于HLSL/GLSL的向量属性语法,例如vec1.yxz + = vec2.xyz;有没有..可能的方式来做到这一点与工会,而不是@property在那里?

+0

您需要'vec1.yxz + = vec2.xyz'的opDispatch,我相信有人已经这样做了。 – kennytm 2011-12-31 09:49:39

+2

@KennyTM - 你是对的 - https://bitbucket.org/dav1d/gljm和https://bitbucket.org/dav1d/gl3n – DejanLekic 2011-12-31 12:15:11

回答

13

使用alias

struct Vector2(T) 
{ 
    T x, y; 
    alias x u; 
    alias y v; 
} 
+0

Doh!我应该知道这一点。谢谢! – 2011-12-31 09:38:23