Практикум по объектно-ориентированному программированию на базе языка с++ Учебно-методическое пособие



Pdf көрінісі
бет34/44
Дата21.02.2024
өлшемі0.49 Mb.
#492719
түріПрактикум
1   ...   30   31   32   33   34   35   36   37   ...   44
ООП С

Конкретизация шаблонных функций. Сам по себе шаблон ничего 
не определяет. Конкретные определения функций, соответствующих 
шаблону, компилятор генерирует при вызове или взятии адреса шаблон-
ной функции с параметрами конкретного типа. Это и будет конкретиза-
ция шаблонной функции. При конкретизации определение того, что под-
ставлять вместо T, происходит при вычислении первого фактического
параметра, причем тип возврата при этом не учитывается. 
При вызове шаблона-функции аргументы шаблона в угловых скобках 
<> могут быть не заданы. Компилятор самостоятельно подставляет тип 
на основании информации о типе фактического аргумента при вызове. 
Явное указание аргументов можно делать и при вызове функции-шаб-
лона, например: 
 
cout << min(5, 10) << endl; // выбор минимума из двух int 
cout << min(3.5, 3.4) << endl; // выбор минимума из двух double 
Специализация шаблонной функции. Бывают случаи, когда для 
каких-то конкретных типов нужно дать особое определение шаблонной 
функции. В этом случае программист должен задать свой специальный 
вариант функции.  
Например: 
template < class T > 
T min (T t1, T t2) 

return (t1

 
char *min (char *s1, char *s2) 

return strcmp(s1,s2)<0 ? s1 : s2; 

Если у нас при вызове min() будут заданы два параметра типа 
char*, то вместо конкретизации шаблона будет вызываться наш специ-
альный вариант функции. 


59 
Специализация может начинаться с ключевого слова template
с пустыми угловыми скобками. Для полной специализации требуется 
задавать специализирующие аргументы после имени шаблона: 
 
template<> // специализация шаблона 
char* min(char* x, char* y) 

return (strcmp(x,y) < 0)?x:y;

Но для шаблонов функций это практически всегда необязательно, 
поскольку компилятор способен выяснить тип самостоятельно. 


Достарыңызбен бөлісу:
1   ...   30   31   32   33   34   35   36   37   ...   44




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет