Інформатика
Функції : Шаблони функцій
 

Шаблони функцій

     За допомогою шаблона функції можна визначити алгоритм, що буде застосовуватися до даних різних типів, а конкретний тип даних передається функції у вигляді параметра на етапі компіляції. Компілятор автоматично генерує правильний код, що відповідає переданому типу. Таким чином, створюється функція, що автоматично перевантажує сама себе й при цьому не містить накладних витрат, пов'язаних з параметризацією.

     Формат найпростішої функції-шаблона:

template <class Type>

заголовок

{/* тіло функції */ }

або

template <typename Type>

заголовок

{/* тіло функції */ }

     Замість слова Туре може використовуватися довільне ім'я.

     У загальному випадку шаблон функції може містити кілька параметрів, кожний з яких може бути не тільки типом, але й просто змінної, наприклад:

template <class A, class В, int i>

void f()

{ ... }.

     Як і звичайні функції, шаблони функцій можуть бути перевантажені як за допомогою шаблонів, так і звичайними функціями.

     Можна передбачити спеціальну обробку окремих параметрів і типів за допомогою спеціалізації шаблона функції.

     Як приклад приведемо шаблон функції, що міняє елементи місцями.

template <class T>

void MySwap(T&a,T&b)

{

     T c=a;

     a=b;

     b=c;

}

Основні властивості параметрів шаблона наступні.

1. Імена параметрів шаблона повинні бути унікальними у всьому визначенні шаблона.

2. Список параметрів шаблона функцій не може бути порожнім.

3. У списку параметрів шаблона функцій може бути кілька параметрів. Кожний з них повинен починатися зі службового слова class.

4. Неприпустимо використовувати в заголовку шаблона параметри з однаковими іменами.

5. Ім'я параметра шаблона має в обумовленої шаблоном функції усі права ім'я типу. Ім'я параметра шаблона видно у всьому визначенні й приховує інші використання того ж ідентифікатора в області, зовнішньої стосовно даного шаблона.

6. Всі параметри шаблона повинні бути обов'язково використані в специфікаціях формальних параметрів визначення функції.

 
© 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.ua
Розроблено за допомогою LERSUS