Функции шаблони
if(a < b) return a;
else return b;
}
double min( double a, double b ) {
if (a < b) return a;
else return b;
}
Ако заместим с Т типа данни, използвани във всяка от функциите min, то получаваме някакъв нов вид функция, в която типът данни е неопределен и може да се приеме като параметър.
Езикът С++ допуска дефиниране на подобни функции и те са известни с името функции шаблони. При дефинирането си всяка функция шаблон трябва да се предшества от специална синтактична конструкция от вида:
template < typename име1, …, typename имеn >
В която template и typename са ключови думи от езика, а име1, …, имеn са имена(идентификатори) на типове данни – параметри на функцията. Вместо ключовата дума typename може да се използва думата class. В случая и двете ключови думи имат един и същ смисъл. Поради това, че думата classсе използва при деклариране на класове, то тук при функциите шаблони ще използваме думата typename.
Пример 1:
template <typename T>
T min( T a, T b )
{
if(a < b) return a;
else return b;
}
int main() {
cout<<min( 10, 20 );
cout<< min( 10.0, 20.0 );
cout<< min( ‘k’, ‘m’ );
return 0;
}
Пример 2: (вектори)
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void readv(vector <T> &v,int n)
{
T a;
for ( int i = 0 ; i <n ; i++ )
{
cin>>a;
v.push_back(a);
}
}
template <typename T>
void writev(vector <T> v)
{
for ( int i = 0 ; i <v.size() ; i++ )cout<<v[i]<<" ";
cout<<endl;
}
int main()
{
vector <int> v1;
cout<<"Vavedete broq na elementite na vektor1: ";
int n;
cin>>n;
readv(v1,n);
writev(v1);
vector <double> v2;
cout<<"Vavedete broq na elementite na vektor2: ";
cin>>n;
readv(v2,n);
writev(v2);
return 0;
}