2011-12-31 12 views
7

Jestem w trakcie przenoszenia, ulepszania i D-atizing naszego reign SDK z C# do D. Obecnie pracuje nad modułem matematyki Vector2.Wyniki D: union vs @property

Czy wystąpi różnica w wydajności między dwiema poniższymi strukturami? Moi benchmarki pokazują identyczną wydajność, ale chciałbym, aby zdobyć trochę eksperckiego wglądu :)

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

Oczywiście chciałbym używać związków dla składniowej prostocie. Ale czy są jakieś nieprzewidziane pułapki z ich użyciem? Nie znam szczegółów niskiego poziomu.

Na marginesie dodam składnię wektorową podobną do HLSL/GLSL, np. Vec1.yxz + = vec2.xyz; Nie ma ... nie ma możliwości, aby to zrobić ze związkami zamiast @property?

+0

Będziesz potrzebować opDispatch dla 'vec1.yxz + = vec2.xyz', i wierzę, że ktoś już to zrobił. – kennytm

+2

@KennyTM - masz rację - https://bitbucket.org/dav1d/gljm i https://bitbucket.org/dav1d/gl3n – DejanLekic

Odpowiedz

13

Użyj alias!

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

Doh! ... Powinienem to wiedzieć. Dzięki! –