2012-03-21 15 views
6

मैं इस कोड में आया और यह सोच रहा था कि इसका क्या अर्थ है। लेकिन इसे देखने के कुछ 15 मिनट बाद भी मुझे समझ में नहीं आता है।अस्पष्ट टाइपिफ़ प्रकार

template< typename T > 
struct Vector4 { 
    typedef T Vector4<T>::* const vec[4]; 
    static const vec constVec; 

    //just to have some member instances of T 
    T member1, member2, member3, member4; 
}; 

तो कॉन्स्टवीक का प्रकार क्या है? कृपया टाइपिफ़ को दोहराएं लेकिन सामान्य भाषा में समझाएं।

मेरे नोट्स अब तक:

  • क्यों दो प्रकार (T और Vector4<T>) देखते हैं, यह एक समारोह सूचक है?
  • :: * मतलब क्या है? वेक्टर 4 के दायरे से सब कुछ ले लो?
  • क्या यह एक कॉन्स पॉइंटर सरणी है? लेकिन फिर :: क्यों?
+3

http://www.gamedev.net/topic/261920-a-slick-trick-in-c/ –

+0

@EddyPronk:। अच्छा पता करने के लिए जहां उन लोगों को ^^ से मिलता है हालांकि मेरा स्रोत वहां से नहीं था (लेकिन प्रतीत होता है कि काफी प्रेरित) – Nobody

उत्तर

10

constVecVector4<T> वर्ग के सदस्यों प्रकार के होते हैं जो T

नोट करने के लिए 4 लगातार संकेत की एक सरणी है: सदस्यों स्थिर नहीं कर रहे हैं, संकेत खुद को कर रहे हैं।

सबसे पहले, क्योंकि ये निरंतर पॉइंटर्स हैं, आपको उन्हें कन्स्ट्रक्टर में प्रारंभ करने की आवश्यकता है: (मैंने अभी static क्वालीफायर देखा है, इसलिए इसे कक्षा के बाहर शुरू किया जाना चाहिए, लेकिन यदि यह स्थिर नहीं है, तो आप 'क्या करना है कि प्रारंभ सूची में आवश्यकता d)

template< typename T > 
struct Vector4 { 
    typedef T Vector4<T>::* const vec[4]; 
    static const vec constVec; 

    //just to have some member instances of T 
    T member1, member2, member3, member4; 

}; 

template<typename T> 
const typename Vector4<T>::vec Vector4<T>::constVec = {&Vector4::member1,&Vector4::member2,&Vector4::member3,&Vector4::member4}; 

int main() { 
    Vector4<int> v; 
    for(int i=0; i<4; i++) { 
     (v.*Vector4<int>::constVec[i]) = 5; 
    } 
return 0; 
} 
+0

मैंने अपने प्रश्न के लिए टाइप टी के एक सदस्य को जोड़ा। क्या आप कुछ कोड जोड़ना चाहते हैं, जो सदस्य के साथ 'vec' का उपयोग दिखाता है? – Nobody

+0

तो, उदाहरण का नैतिक यह है कि आप सदस्यों के माध्यम से पुन: प्रयास कर सकते हैं। – enobayram

+0

+1 बहुत अच्छा है। स्पष्टीकरण और उदाहरण के लिए धन्यवाद। – Nobody

संबंधित मुद्दे