Функціональні шаблони

Визначення й використання шаблонів функцій

Шаблон функцiї – це узагальнене визначення, з якого компілятор може автоматично генерувати код (створювати представника) функції. Синтаксис шаблона функції має такий вигляд:

template<список_аргументiв_шаблона>

Тип_результату iм'я_функцiї(параметри...)

{ //Тiло функцiї

}

За ключовим словом template йдуть один чи кілька аргументів, які поміщені в дужки < > (вимога синтаксису) i відокремлені один від одного комами. Кожний аргумент складається з ключового слова class та ідентифікатора, який визначає тип. Потім записується визначення функції. Наприклад:

template<class T>

Void func(T t)

{

//тiло функцiї

}

template<class T>

Void func_1(T t1,T t2)

{

//тiло функцiї

}

template<class T1,class T2>

Void func_2(T1 t1,T2 t2)

{

//тiло функцiї

}

Розглянемо програму сортування елементів масиву. Використовуючи шаблон функції, можна написати таку програму для масиву будь-якого типу. Наприклад:

#if!defined(__SORTTMPL_H)

#define__SORTTMPL_H

template<class T>

void sort(T array[ ],size_t size)

{for(int i=0;i<size-1;i++)

for(int j=size-1;i<j;j--)

if(array[j-1]< array[j])

{T tmp=array[j];

array[j]=array[j-1];

array[j-1]=tmp;}

}

#endif//__SORTTMPL_H

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

template<class T>void sort(T array[ ],size_t size);

Після визначення шаблона функції можна одразу її викликати – компілятор автоматично створить представника тіла функції для викликів, де конкретизуються параметри:

#include <iostream.h>

Int main(void)

{int myarray[ ]={30,27,45,10,23,7,4,89};

sort(myarray,sizeof(myarray)/sizeof(myarray[0]));

for(inti=0;i<sizeof(myarray)/sizeof(myarray[0]);i++)

cout<<"myarray["<<i<<"]="<<myarray[i]<<endl;

return 0;}

Шаблон sort можна використовувати i для класів користувача, якщо клас містить перевантажену операцію '<', яку застосовують у шаблоні для порівняння елементів. Наприклад:

Class Prise

{long gryv;

int cop;

public:

Prise(long_g,int_c)

{gryv=_g;

cop=_c;}

int operator<(const Prise&);

friend ostream& operator<<(ostream &,Prise &);

};

int Prise::operator<(const Prise&_amt)

{return(gryv<_amt.gryv)||

(gryv==_amt.gryv && cop<_amt.cop);}

ostream& operator<<(ostream& os,Prise&_amt)

{os<<"UGR"<<_amt.gryv<<'.'<<_amt.cop;

return os;}

Int main(void)

{

Prise dollar[ ]={

Prise(5,10),

Prise(5,99),

Prise(4,95),

Prise(6,01)};

sort(dollar,sizeof(dollar)/sizeof(dollar[0]));

cout<<"Курс долара по роках:\n";

for(int i=0;i<sizeof(dollar)/sizeof(dollar[0]);i++)

cout<<"200"<<i<<"="<<dollar[i]<<endl;

return 0;}

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: