תבניות - המשך
 
הנה דוגמא לצורה בה היינו משתמשים למחלקת Array הקודמת:

Array a;
int b;
a[0] = 5;
b = a[0];
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

כאשר משנים את המחלקה לתבנית, עלינו להוסיף דבר אחד בעת השימוש: עלינו לומר למהדר באיזה טיפוס של מערך נרצה להשתמש, עושים זאת בצורה הבאה:

Array<int> a;
int b;
a[0] = 5;
b = a[0];
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

מקום נוסך שבו דרוש שינוי כאשר הופכים מחלקה לתבנית הוא בהגדרות פונקציות החבר של המחלקה. לדוגמא, הנה הגדרת האופרטור [] לפני שהפכנו את המחלקה לתבנית:

int &Array::operator[](int s)
{
 int *newStorage;
 if (s>elementCount)
 {
  newStorage = new int[s];
  for (int i=0; i<elementCount; i++)
   newStorage[i] = storage[i];
  delete []storage;
  storage = newStorage;
 }
 return storage[s];
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

והנה הגדרת האופרטור לאחר שינוי המחלקה לתבנית:

template<class T>
T &Array::operator[](int s)
{
 T *newStorage;
 if (s>elementCount)
 {
  newStorage = new T[s];
  for (int i=0; i<elementCount; i++)
   newStorage[i] = storage[i];
  delete []storage;
  storage = newStorage;
 }
 return storage[s];
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

הוספנו את ראש התבנית, כמו במחלקה, והחלפנו את הופעות המילה int במילה T.