संदेह होने पर, आवेदन सूट करने के लिए डेटा संरचना बदलने के लिए:
struct xyz
{
float p[3];
};
पठनीयता के लिए आप चाहते हो सकता है पर विचार करने के:
struct Functor
{
virtual void operator()(const float& f) = 0;
};
struct xyz
{
void for_each(Functor& ftor)
{
ftor(p[0]);
ftor(p[1]);
ftor(p[2]);
return;
}
private:
float p[3];
}
:
struct xyz
{
enum { x_index = 0, y_index, z_index, MAX_FLOATS};
float p[MAX_FLOATS];
float X(void) const {return p[x_index];}
float X(const float& new_x) {p[x_index] = new_x;}
float Y(void) const {return p[y_index];}
float Y(const float& new_y) {p[y_index] = new_y;}
float Z(void) const {return p[z_index];}
float Z(const float& new_z) {p[z_index] = new_z;}
};
शायद यहां तक कि कुछ अधिक कैप्सूलीकरण जोड़ने
सामान्य रूप से, यदि डेटा संरचना को दो या दो से अधिक अलग तरीकों से इलाज करने की आवश्यकता है, तो शायद डेटा संरचना को फिर से डिजाइन करने की जरूरत है; या कोड।
class idVec4 {
public:
float x;
float y;
float z;
float w;
...
const float * ToFloatPtr(void) const;
float * ToFloatPtr(void);
...
}
ID_INLINE const float *idVec4::ToFloatPtr(void) const {
return &x;
}
ID_INLINE float *idVec4::ToFloatPtr(void) {
return &x;
}
यह कई सिस्टम पर काम करता है:
स्रोत
2010-01-18 20:01:30
मुझे लगता है कि जब तक सभी 'फ्लोट' सदस्य एक-दूसरे के बगल में हों, लेकिन मैंने मानक नहीं पढ़ा है :) – kennytm
@ केनीटीएम जो आपने कहा वह सच है, लेकिन महत्वपूर्ण हिस्सा ".. सभी फ्लोट सदस्य एक दूसरे के बगल में हैं .. "। यह मानने का कोई कारण नहीं है कि वे सभी एक दूसरे के बगल में हैं। –
चूंकि यह तकनीक विवादास्पद हो सकती है, इसलिए बेहतर संरचना 'संरचना' के अंदर एक सरणी है। –