template ها ابزار مهمی در برنامه نویسی C++ هستند. در این روش برنامه سازی، قالب یک کلاس یا تابع بر اساس یک پارامتر مجهول نوشته میشود. ترجمه این قطعه از کد تا زمانی که آن پارامتر صراحتا به کامپایلر اعلام شود به تاخیر میافتد. اعلام پارامتر مجهول به کامپایلر سبب میشود که نمونهای از آن قالب با نوع مشخص ایجاد شود که به این عمل نمونهسازی یا instantiating گفته میشود. تا قبل از زمان نمونه سازی به علت وجود پارامتر مجهول، کامپایلر توانایی ترجمه کد را ندارد.
[cpp light=”true”]template class std::vector
طبق استاندارد C++، کامپایلر موظف بود دقیقا در هرجایی که پارامترهای یک template به طور کامل اعلام شد نمونهای از آن بسازد. این روش نمونهسازی دو مشکل داشت:
- ممکن بود نمونهسازی در جاهای مختلفی از کد انجام شود. در این صورت کامپایلر مجبور به دوباره کاری میشد و نهایتا نتیجه کند شدن فرایند کامپایل بود.
- به علت اینکه در لحظه نمونهسازی کامپایلر نیاز داشت که تمام کد قالب در دسترس باشد، جدا کردن فایل هدر از سورس ممکن نبود.
برای حل این مشکلات extern template class توسط C++0x معرفی شد:
[cpp light=”true”]extern template class std::vector
با این روش، نمونهسازی با تاخیر انجام شده و از مشکلات بالا جلوگیری میشود.