Имя_функции(список_параметров)

{тело_функции}

Когда инстанцируется шаблон? Этот процесс происходит в ответ на вызов функции maxEl в программе. Причем тип параметра шаблона компилятор определяет сам на основе анализа передаваемых в функцию параметров. Вот как можно обратиться к функции maxEl:

int _tmain(int argc, _TCHAR* argv[])

{

double m1[10]={2.5,1.4,.5,-.06,-1.8,7.9,3.3,5.7,6.9,5.8};

cout<<maxEl(m1, 10)<<endl; //7.9

int m[10]={2,4,5,0,-1,20,3,5,6,10};

cout<<maxEl(m, 10)<<endl; //20

char str[]="Hello";

cout<<maxEl(str, 6); //о

system("pause");

return 0;

}

В ответ на три вызова в программе компилятор сгенерирует три определния функции maxEl с типами параметра mas: double *, int* и char *. Важно, чтобы все используемые в шаблоне операции были применимы к подставляемым типам даных, иначе возникнет ошибка на этапе компиляции. Так, если мы вызовем функцию maxEl для массива структур, компилятор не сможет применить для них операцию отношения и сгенерирует ошибку.

Зачастую тип параметров шаблона не может быть точно определен компилятором (например, он используется только для конкретизации типа возвращаемого значения). Тогда тип шаблона можно явно указать при вызове. Для нашей функции maxEl это будет выглядеть так:

maxEl<int>(m,10);

Перечислим основные правила определения шаблонов функции в С++:

1) Имена параметров шаблона должны быть уникальными во всем определении шаблона.

2) Параметр шаблона должен обязательно встречаться в сигнатуре шаблона.

2) Список параметров шаблона не может быть пустым.

3) В списке параметров шаблона может быть несколько параметров, и каждому из них должно предшествовать ключевые слова class или typename.

4) Определенная с помощью шаблона функция может иметь любое количество непараметризованых формальных параметров. Может быть непараметризовано и возвращаемое функцией значение.

5) При конкретизации параметризованной функции необходимо, чтобы при вызове функции типы фактических параметров, соответствующие одинаково параметризованным формальным параметрам, были одинаковы.

6) При определении шаблонов функции его параметрам нельзя присваивать значений по умолчанию.

7) Допустима перегрузка шаблонов функций.

Шаблоны функций являются мощным средством обобщения описания процесса однообразной обработки разнотипных данных в программе.


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



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