Министерство цифровых информационных технологий и коммуникаций республики узбекистан каршинский филиал ташкентского университета информационных технологий


Download 98.86 Kb.
bet6/11
Sana18.11.2023
Hajmi98.86 Kb.
#1785551
TuriСамостоятельная работа
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
5-mus

template<class Type>
Type _min(Type a, Type b) {
if (a < b) {
return a;
}
return b;
}


int main(int argc, char** argv) {
std::cout << _min(1, 2) << std::endl;
std::cout << _min(3.1, 1.2) << std::endl;
std::cout << _min(5, 2.1) << std::endl; // oops!
return 0;
}

Решается эта проблема указанием конкретного типа при вызове функции.
#include
template<class Type>
Type _min(Type a, Type b) {
if (a < b) {
return a;
}
return b;
}


int main(int argc, char** argv) {
std::cout << _min<double>(5, 2.1) << std::endl;
return 0;
}

Когда шаблонная функция (не) будет работать?
В принципе, можно понять, что компилятор просто подставляет нужный тип в шаблон. Но всегда ли получаемая функция будет работоспособна? Очевидно, что нет. Любой алгоритм может быть определен независимо от типа данных, но он обязательно пользуется свойствами этих данных. В случае с шаблонной функцией _min это требование определения оператора упорядочения (оператор <).

Любой шаблон функции предполагает наличие определенных свойств параметризованного типа, в зависимости от реализации (например, оператора копирования, оператора сравнения, наличия определенного метода и т.д.). В ожидаемом стандарте языка С++ за это будут отвечать концепции.

Перегрузка шаблона функции


Шаблоны функций также могут перегружаться. Обычно данная перегрузка выполняется при


template<class Type>
Type* _min(Type* a, Type* b){
if(*a < *b){
return a;
}
return b;
}

Частные случаи


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



Download 98.86 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling