Синтаксис шаблонів
Якщо ви збираєтеся використовувати шаблони, звикайте до того, що у вашій мові часто звучатиме термін параметризований (parameterized). Шаблони використовуються для створення параметризованих типів (зазвичай класів) та параметризованих функцій.
Параметризовані типи
template class ListNode < private:
ListNode *next; Type* data;
ListNode(Type* d, ListNode * n = NULL) : next(n), data(d) <>
Type* Data() < return data; >ListNode * Next()
ListNode list = New ListNode (New Foo);
Foo* f = list->Data(); // Повертає правильний тип
Параметризовані функції
// Оголошення функції template Type * fn (Type * t);
// Визначення її реалізації template
// Тіло функції, у якому ім'я Type
// використовується як параметр макросу
Foo f = fn (new Foo);
Визначення генерується компілятором у разі потреби, тобто при виклику функції. Цього разу налаштовано ім'я функції, а не ім'я класу.
Параметризовані функції класів
template class ListNode < private:
ListNode next; Type* data;
ListNode(Type* d, ListNode * n = NULL);
Type* Data(); ListNode * Next();
ListNode ::ListNode(Type* d, ListNode * n = NULL) : next(n), data(d)
Type* ListNode ::Data()
ListNode * ListNode ::Next()
Пам'ятайте: все це повинно бути у файлі .h. Виняток становлять ситуації, коли функції класу викликаються лише з файла .срр, у якому визначаються. У цьому випадку визначення функцій класу повинні передувати їх першому використанню.
Передача параметра
1. За ключовим словом class на самому початку.
2. При вказівці імені конструктора.
3. При вказівці іменідеструктор.
Аргументи конструкторів та деструкторів мають бути параметризованими, як і всі використання імені класу за винятком трьох зазначених випадків. За будь-якого використання параметризованого