मैं डी में एक वेक्टर struct है कि इस तरह काम करता है बनाना चाहते हैं:फास्ट वेक्टर स्ट्रक्चर जो डी में [i] और .xyz-operation को अनुमति देता है?
vec u, v;
vec w = [2,6,8];
v.x = 9; // Sets x
v[1] = w.y; // Sets y
u = v; // Should copy data
बाद में मैं भी u = v * u
आदि जैसे सामान जोड़ना चाहते हैं लेकिन इसके बाद के संस्करण अब के लिए क्या करेंगे।
यह कितनी दूर मैं आ गए है:
struct vec3f
{
float[3] data;
alias data this;
@property
{
float x(float f) { return data[0] = f; }
float y(float f) { return data[1] = f; }
float z(float f) { return data[2] = f; }
float x() { return data[0]; }
float y() { return data[1]; }
float z() { return data[2]; }
}
void opAssign(float[3] v)
{
data[0] = v[0];
data[1] = v[1];
data[2] = v[2];
}
}
अब इस काफी यह काम है कि मैं चाहता था बनाता है, लेकिन मैं अगर यह है "सही" के बारे में बहुत अनिश्चित लग रहा है। क्या opAssign() शायद कुछ मूल्य लौटाए?
मैं यह भी सोच रहा हूं कि यह वास्तव में जितना तेज़ हो सकता है? क्या मैंने alias data[0] x;
आदि जोड़ने की कोशिश की है लेकिन यह काम नहीं करता है। कोई विचार? या यह "यह कैसे किया जाता है" है? शायद कंपाइलर प्रोटीरी फ़ंक्शंस को कम या ज्यादा उपनामों को समझने के लिए पर्याप्त स्मार्ट है?
+1, मेरे पास opDispatch के साथ swizzling के लिए एक ही विचार था। मैं अभी भी डी के शुरुआती चरणों में हूं, इसलिए मेरा समाधान शायद उतना अच्छा नहीं है जितना हो सकता है। संकलन-समय की चीज़ें जो आप कर सकते हैं वह दिमागी दबदबा है, यद्यपि! – shambulator