template< typename T >
T min( T a, T b )
{
return a < b ? a : b;
}
Ushbu funktsiyani chaqirish uchun siz shunchaki uning nomidan foydalanishingiz mumkin:
min( 1, 2 );
min( 'a', 'b' );
min( string( "abc" ), string( "cde" ) );
Shablon funksiyasini chaqirish
Umuman olganda, shablon funksiyasini chaqirish uchun siz barcha shablon parametrlari uchun qiymatlarni kiritishingiz kerak. Buni amalga oshirish uchun shablon nomidan keyin burchakli qavslardagi qiymatlar ro'yxati ko'rsatiladi:
int i[] = { 5, 4, 3, 2, 1 };
sort(i, 5);
char c[] = "бвгда";
sort( c, strlen( c ) );
sort< int >(c, 5); // ошибка: у sort параметр int[], а не char[]
char *ReadString = read<20>();
delete[] ReadString;
ReadString = read<30>();
Har bir variant to'plami uchun kompilyator funksiyaning yangi nusxasini yaratadi. Yangi namuna yaratish jarayoni shablonni yaratish deb ataladi.
Yuqoridagi misolda kompilyator tartiblash funksiyasi shablonining ikkita ixtisoslashuvini (char va int turlari uchun) va ikkita o'qish shablonining ixtisoslashuvini (BufferSize 20 va 30 qiymatlari uchun) yaratdi. Ikkinchisi behuda bo'lishi mumkin, chunki parametrning har bir mumkin bo'lgan qiymati uchun kompilyator faqat bitta konstanta bilan farq qiladigan ko'proq va ko'proq yangi funktsiyalar namunalarini yaratadi.
Parametr qiymatlarini chiqarish
Ba'zi hollarda kompilyator funktsiya argumentidan funksiya shablon parametrining qiymatini xulosa qilishi (mantiqiy aniqlashi) mumkin. Masalan, yuqorida tavsiflangan tartiblash funksiyasini chaqirganda, shablon parametrini ko'rsatish shart emas (agar u massiv argumentining element turiga mos kelsa):
int i[5] = { 5, 4, 3, 2, 1};
tartiblash (i, 5); // qo'ng'iroqlarni tartiblash
char c[] = "bvgda";
sort( c, strlen( c ) ); // qo'ng'iroqlarni tartiblash
Olib tashlash yanada murakkab holatlarda ham mumkin.
Butun sonli parametrlarga ega sinf shablonlaridan foydalanilganda, bu parametrlar haqida xulosa chiqarish ham mumkin. Masalan:
30>20>
Dostları ilə paylaş: |