МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Перше звернення до функції 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); } Зустрівши виклик функції, компілятор використовує наступний алгоритм для дозволу посилання: · знайти звичайну (нешаблонну) функцію, типи параметрів якої в точності відповідають вказаним у виклику; · якщо функція не знайдена, знайти шаблонну функцію, яка породжує функцію, типи параметрів якої в точності відповідають вказаним у виклику; · якщо така шаблонна функція не знайдена, знову почати пошук звичайної функції, параметри якої можна перетворити до заданих при виклику.
Читайте також:
|
||||||||
|