قالبها
قالبها متفاوت با ماکروها هستند. در حالی که هر دوی این ویژگیهای زمان کام پایل برای ایجاد کامپایل شرطی استفاده میشوند قالبها محدود هب تغییرات لغوی و متنی نیستند. قالبها با آگاهی از معنا و سیستم نوع در زبان استفاده شده و سایر ویژگیهای زمان کامپایل میتوانند از عملیات سطح بالا برای کنترل ترتیب اجرا براساس نوع پارامترها استفاده نمایند. ماکروها کنترل خود را بر کامپایل از طریق ویژگیهای از پیش تعیین شهد انجام میدهند ولی قادر به ایجاد انواع جدید و کنترل نوع نیستند و فقط محدود به تغییرات متنی پیش از کامپایل هستند. به زبان دیگر ماکروها کنترل خود را با استفاده از نشانههای از پیش تعیین شده انجام میدهند اما همانند قالبها نمیتوانند نشانهها را خود ایجاد نمایند. قالبها ابزاری برای چندریختی ایستا و برنامهنویسی جنریک است. مثلاً جایگزین معادل با استفاده از قالبها برای عبارت خطرناک #define max(x،y) ((x)>(y)?(x):(y)) در پایین نشان داده شدهاست.
template <typename T>
const T& max(const T& x, const T& y)
{
return x > y ? x : y;
}
این قالب در سرآیند algorithm تحت عنوان std::max() قابل دسترسی است. معمولاً میتوان از کلمه کلیدی class بجای typename استفاده کرد.
علاوه بر این قالبها یک ویژگی تورینگ-کامل هستند که به این معناست که هر برنامه قابل محاسبه توسط کامپیوتر را میتوان با استفاده از فرابرنامهنویسی قالبها نوشت.
بطور خلاصه استفاده از قالبها به معنای نوشتن هر تابع یا کلاس باشتفاده از تمامی انواع ممکن است که در قالب آن را پیش از کامپایل معین نمیکنیم.