2011-12-31 38 views
7

Tôi đang trong quá trình chuyển, nâng cao và D-atizing reign SDK của chúng tôi từ C# sang D. Hiện đang làm việc trên mô-đun toán học Vector2.Hiệu suất D: union vs @property

Sẽ có bất kỳ khác biệt hiệu suất nào giữa hai cấu trúc bên dưới không? Điểm chuẩn của tôi cho thấy hiệu suất giống nhau, nhưng tôi muốn đạt được một chút thông tin chi tiết về chuyên gia :)

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

Rõ ràng là tôi muốn sử dụng các liên minh để đơn giản hóa cú pháp. Nhưng có bất kỳ cạm bẫy không lường trước được khi sử dụng chúng không? Tôi không quen với chi tiết cấp thấp của họ.

Lưu ý phụ, tôi thêm cú pháp thuộc tính vectơ tương tự như HLSL/GLSL, ví dụ: vec1.yxz + = vec2.xyz; Có ... không .. cách có thể để làm điều đó với các công đoàn thay vì @property là có?

+0

Bạn sẽ cần opDispatch cho 'vec1.yxz + = vec2.xyz' và tôi tin rằng ai đó đã làm điều này rồi. – kennytm

+2

@KennyTM - bạn đúng - https://bitbucket.org/dav1d/gljm và https://bitbucket.org/dav1d/gl3n – DejanLekic

Trả lời

13

Sử dụng alias!

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

Doh! ... Lẽ ra tôi nên biết điều đó. Cảm ơn! –

Các vấn đề liên quan