МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
Перше звернення до функції max генерує функціюconst String& max(const String& а, const String& b); Другий обіг генерує функцію const int& max(const int& а, const int& b); Оголошення шаблона функції max говорить, що конкретна функція залежить від одного параметра - типа Т. Перше звернення до max в програмі використовує аргументи типу string. В шаблон функції підставляється тип String замість Т. Виходить функція: const Strings max(const Strings а, const Strings, b) { if (а > b) return а; else return b; } Ця функція компілюється і використовується в програмі. Аналогічні дії відбуваються і при другому зверненні, тільки тепер замість параметра Т підставляється тип int. Як видно з наведених прикладів, компілятор сам визначає, яку функцію треба використовувати і автоматично генерує необхідне визначення. У функції-шаблона може бути декілька параметрів. Так, наприклад, функція find бібліотеки STL (стандартної бібліотеки шаблонів), яка шукає перший елемент, рівний заданому, в інтервалі значень, має вигляд: template <class Inlterator, class T> Inlterator find(Inlterator first, Inlterator last, const TS val); Клас Т - це тип елементів інтервалу. Тип Inlterator - тип покажчика на початок і кінець інтервалу. Не завжди шаблонна функція може бути ефективно застосована до всіх передбачених типів даних. В цьому випадку ніщо не заважає вам визначити спеціалізований варіант цієї функції для якогось типу параметрів. Наприклад, розглянута вище шаблонна функція template <class T> const T& max(const T& а, const T& b) непридатна для використовування з масивами символів. В цьому випадку можна визначити спеціалізовану версію функції. Наступний приклад це демонструє: #include <iostream> #include <cstring> //Повертає більший з двох параметрів template <class T> const Т& max(const T& а, const T& b) { return а > b ? а : b; } char* max(char* strl, char* str2) { return strcmp(strl, str2) >= 0 ? strl : str2; } void main() { int m = 9, n = 12; char* str1 = "слово і справа" ; char* str2 = "слово і cправа" ; cout « "max int = " « max (m, n); cout « "max str = " « max (strl, str2); } Зустрівши виклик функції, компілятор використовує наступний алгоритм для дозволу посилання: · знайти звичайну (нешаблонну) функцію, типи параметрів якої в точності відповідають вказаним у виклику; · якщо функція не знайдена, знайти шаблонну функцію, яка породжує функцію, типи параметрів якої в точності відповідають вказаним у виклику; · якщо така шаблонна функція не знайдена, знову почати пошук звичайної функції, параметри якої можна перетворити до заданих при виклику.
Читайте також:
|
||||||||
|