2011-10-14 16 views
61

इसका मतलब यह है कि कंपाइलर टेम्पलेट क्लास को संकलित करने के लिए दो चरण लुकअप का उपयोग कर रहा है?दो चरण लुकअप - स्पष्टीकरण की आवश्यकता

+1

@ नवाज मैंने केवल दो चरण लुकअप सुना है, क्या मुझे कुछ याद आ रही है? – smallB

+2

इस विषय पर एक संक्षिप्त और उपयोगी आलेख http://blog.llvm.org/2009/12/dreaded-two-phase-name-lookup.html –

+1

पर भी पाया जा सकता है http://stackoverflow.com/a/10171507/76722 और http://stackoverflow.com/a/7241548/76722 –

उत्तर

52

टेम्पलेट्स संकलित किए जाते हैं (कम से कम) दो बार:

  1. आरंभ होने के बिना टेम्पलेट कोड में ही वाक्य रचना के लिए जाँच की है।
    उदाहरण के लिए: इस तरह के ; आदि

  2. इन्स्टेन्शियशन के समय (जब सही प्रकार में जाना जाता है) पर के रूप में किसी भी वाक्यविन्यास त्रुटियों त्रुटियों, टेम्पलेट कोड फिर से सुनिश्चित करने के लिए सभी कॉल्स उस विशेष प्रकार के लिए मान्य हैं चेक किया गया है।
    उदाहरण: टेम्पलेट उन कार्यों को कॉल कर सकता है जो उस विशेष प्रकार के लिए मौजूद नहीं हो सकते हैं।

इसे दो चरण लुकअप कहा जाता है।

+38

यह भी ध्यान रखें कि गैर-निर्भर नामों के लिए खोज पहले चरण में किया जाता है, जबकि टेम्पलेट पैरामीटर पर निर्भर नामों के लिए खोज दूसरे में किया जाता है अवस्था। महत्व यह है कि यदि आप 'sqrt (1)' कहते हैं, तो टेम्पलेट परिभाषित होने से पहले 'sqrt' घोषित करने की आवश्यकता है। लेकिन अगर आप 'sqrt (t)' कहते हैं, जहां 't' एक प्रकार का उदाहरण है जो टेम्पलेट पैरामीटर है, तो टेम्पलेट को तत्काल होने तक' sqrt' दिखाई नहीं देनी चाहिए। एमएसवीसी ने इसे सही तरीके से करने के लिए उपयोग नहीं किया: अभी भी मुझे पता नहीं है। –

+11

वैसे भी, यही कारण है कि इसे केवल दो चरण संकलन या कुछ के विपरीत दो चरण * लुकअप * कहा जाता है। पहला चरण केवल सिंटैक्स की जांच करने से अधिक करना है, लेकिन एमएस को पहले लुकअप चरण को लागू करने में कुछ कठिनाई थी, इसलिए उन्होंने तुरंत इसे तुरंत किया: http://stackoverflow.com/questions/6273176/what-exactly-is माइक्रोसॉफ्ट-विज़ुअल-सीएस-दो-चरण-टेम्पलेट-तत्काल –

+0

@ स्टेवजेसॉप: यह और अधिक लगता है - कुंजी दो चरण लुकअप का "लुकअप" हिस्सा है। धन्यवाद! –

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