जब आप C++ में किसी टेम्पलेट को इंस्टेंट करते हैं, तो कंपाइलर एक नया वर्ग बनाता है। इस वर्ग में वे सभी स्थान हैं जहां आपने टेम्प्लेट तर्कों को वास्तविक तर्क से बदल दिया है जिसे आप इसका उपयोग करते समय पास करते हैं। उदाहरण . के लिए -
template<typename T> class MyClass { T foo; T myMethod(T arg1, T arg2) { // Impl } };
और अपने कार्यक्रम में कहीं न कहीं इस वर्ग का उपयोग करें,
MyClass<int> x;
कंपाइलर आपके द्वारा पास किए जाने वाले प्रत्येक प्रकार के तर्क के लिए इसका सामना करने पर एक नया वर्ग बनाता है। उदाहरण के लिए, यदि आपने अलग-अलग टेम्पलेट तर्कों के साथ 3 ऑब्जेक्ट बनाए हैं, तो आपको 3 वर्ग मिलेंगे, जो -
के बराबर होंगे।class MyClassInt { int foo; int myMethod(int arg1, int arg2) { // Impl } };
ऐसा करने के लिए, कंपाइलर को इस तरह के बयानों का सामना करने से पहले कक्षा के कार्यान्वयन और विधियों तक पहुंच की आवश्यकता होती है, ताकि उन्हें टेम्पलेट तर्क (इस मामले में int) के साथ तुरंत चालू किया जा सके। यदि ये टेम्पलेट वर्ग कार्यान्वयन शीर्षलेख में नहीं होते, तो वे पहुंच योग्य नहीं होते और इसलिए संकलित नहीं होंगे।