2011-12-31 21 views
7

C# 'dan D reign SDK porting, geliştirme ve D-atlatma sürecinde olduğum için Şu anda Vector2 matematik modülü üzerinde çalışıyor.D performans: sendika vs @property

Aşağıdaki iki yapı arasında herhangi bir performans farkı olacak mı? Benim kriterler aynı performansı gösterir, ancak ben uzman içgörü biraz :)

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; } 
} 

Açıkçası ben sözdizimsel basitlik için sendikalara kullanmak istediğiniz kazanmak istiyorum. Ama bunları kullanarak öngörülemeyen herhangi bir tuzak var mı? Düşük seviyeli detaylarına aşina değilim.

Bir yan notta, HLSL/GLSL'ye benzer vektör özelliği sözdizimini ekliyorum, ör. Vec1.yxz + = vec2.xyz; Orada ... hayır .. sendikalar yerine bunu yapmak için olası bir yol var mı?

+0

Sen 'vec1.yxz + = vec2.xyz' için opDispatch gerekir ve ben birileri bu yapmış inanıyoruz. – kennytm

+2

@KennyTM - doğru - https://bitbucket.org/dav1d/gljm ve https://bitbucket.org/dav1d/gl3n – DejanLekic

cevap

13

Kullanım alias!

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

Doh! ... Bunu bilmeliydim. Teşekkürler! –