C++ Templates
در C++، Template (قالب) یک قابلیت قدرتمنده که اجازه میده توابع یا کلاسهای کلی (Generic) بنویسیم؛ یعنی بدون مشخص کردن نوع دقیق داده، یک بار کد مینویسیم و بعد برای انواع مختلف استفاده میکنیم.
🔹 چرا Template؟
فرض کنید میخواهیم تابعی بنویسیم که دو عدد رو جابهجا (swap) کنه.
اگه نوع داده فرق کنه (int، double، string و …) مجبوریم برای هر کدوم یک تابع جدا بنویسیم.
با Template فقط یک بار مینویسیم.
1️⃣ Function Template
ساختار کلی
-
template
شروع تعریفه. -
typename
یاclass
برای تعیین پارامتر نوع (هر دو یکی هستن). -
T
نام نوع عمومی (میتونه هر اسمی باشه).
مثال: تابع swap
2️⃣ Class Template
ساختار کلی
مثال:
3️⃣ Template با چند پارامتر
میتونیم چند نوع مختلف بگیریم:
4️⃣ Default Type برای Template
میشه نوع پیشفرض تعیین کرد:
5️⃣ Template Specialization (ویژهسازی)
برای یک نوع خاص میتونیم پیادهسازی متفاوت بدیم:
✅ نکات مهم
-
Templates در زمان کامپایل گسترش پیدا میکنن (Compile-time).
-
خطاهای نوع (Type errors) هم در زمان کامپایل مشخص میشن.
-
برای توابع، اگر نوع آرگومانها مشخص باشه، کامپایلر خودش نوع
T
رو حدس میزنه. -
امکان استفادهی تو در تو (Nested Templates) هم هست.
💡 خلاصه:
Templates ابزار «کد عمومی» در C++ هستن: یک بار بنویس، برای هر نوعی استفاده کن—از توابع ساده تا کلاسهای پیچیدهٔ کتابخانه استاندارد (STL) همگی بر پایهٔ Template ساخته شدن.