मैं बहुत सारे वेक्टर गणित सामग्री कर रहा हूं और इसके लिए अपना स्वयं का टेम्पलेट लिखा है।सी ++ वेक्टर मैथ और ओपनजीएल संगत
मेरी आवश्यकताएं वेक्टर गणित (अतिरिक्त, घटाव, स्केल, क्रॉस प्रोड, और डॉट प्रोड) के बहुत सारे हैं, मुझे भी अपने वेक्टर को फ्लोट के रूप में पास करने में सक्षम होना चाहिए [] ताकि ओपनजीएल इसका उपयोग कर सके।
मैं इसे कभी-कभी खुशी से उपयोग कर रहा हूं, आज एक व्याख्याता ने इसे देखा और चिल्लाया। दो चीजें थीं जिन्हें वह विशेष रूप से नफरत करता था (जिसमें से मैं समझता हूं), मेरा विरासत का उपयोग क्योंकि यह is a
शैली का पालन नहीं करता था। और मेरा कास्टिंग (T*)this
, निश्चित रूप से उसके पास समाधान के रास्ते में बहुत कुछ नहीं था।
पहले: विरासत, मैं इतना है कि मैं इस तरह मेरे वैक्टर तैयार किया गया vec4 के लिए vec2 का उपयोग करने में सक्षम होने की जरूरत है।
template<typename T>
Vector2D
{
public:
getX(), getY(), setX(), setY() ....
};
template<typename T>
Vector3D : public Vector2D<T>
{
public:
getZ(), setZ() ...
}
template<typename T>
Vector4D : public Vector3D<T>
{
public:
getW(), setW() ...
}
यह बुरा क्यों है? और tbh मैं नहीं देख सकता कि इसे कैसे सुधारें। मुझे टाइप करना चाहते हैं (चाहते हैं) टाइप को परिभाषित करने में सक्षम होना चाहिए और कुछ प्रकार के गेटर्स और सेटर्स हैं। मैं अपने .getX()
, .setX()
सामान है और तब तक .at()
या []
की तरह कुछ के साथ बदलना होगा अगर मैं यह
template<typename T, int _size>
VectorT
की तरह पुन: व्यवस्थित। tbh मैं .getX()
की पठनीयता को प्राथमिकता देता हूं, हालांकि यह ऑपरेटर परिभाषाओं को आसान बना देगा।
दूसरा: मैं देख सकता हूँ क्यों यह बुरा है, लेकिन यह तो मैं ओपन की विधि में इन वैक्टर कि एक नाव सरणी मैं सूचक ऑपरेटर
// Defined in Vector2D<T>
operator*() { return (T*)this; }
के रूप में अतिभारित किया है उम्मीद पारित कर सकते हैं बनाने के लिए मैं इसे समझता हूं, इस बात की कोई गारंटी नहीं है कि संकलक कक्षा की शुरुआत में सदस्य चर, x, y, z, w को रखेगा, और यदि सावधान नहीं है तो मैं इसके बजाय v-table को पास कर सकता हूं। हालांकि मुझे स्वीकार करना होगा कि अब तक मुझे कोई समस्या नहीं है।
एकमात्र तरीका यह है कि मैं इसके आसपास देख सकता हूं कि वापस आने वाली एक सरणी को बनाए रखना है। जो मुझे लगता है कि अगर मैं वैसे ही वैक्टरों से निपटता हूं तो मैं इसे बदल दूंगा।
पोस्ट अधिक कोड है। 'ऑपरेटर *' कहां परिभाषित किया गया है? GetX() और setX() विधियां कहां हैं? –