Step 8 (S-11553)
Step on Stepik: https://stepik.org/lesson/567/step/8
<img width="50%" src="https://ucarecdn.com/1ba9238d-be4a-4f58-86c3-d9faa54c0956/">
[00:00 - 00:14] пришло время подвести некоторое резюме про шаблоны на прошлом сайте мы выяснили что шаблоны необходимо определять в заголовочных однако с точки зрения стиля не очень хорошо что объявление перемешана с определения поэтому
[00:14 - 00:29] большой шаблонные классы стараемся разделять на объявление класса и его реализацию иногда это делают в рамках 1 заголовочные файлы на 2 в таком случае большой шаблоны класс разбивается на заголовочный файл
[00:29 - 00:44] и определять например если мы определяем шаблоны класс массива то в объявление можно положить в заголовочный файл речь о его определение вынести другой заголовочный файл для того чтобы
[00:44 - 01:03] для использования данного класса было достаточно подключить только р сч заголовочный файл с реализацией то есть еще добавляется в конец файла речка при помощи директиву include то есть в конце файла и ручки
[01:03 - 01:19] пишем include эры импал точка таким образом при подключении файла я теперь мы подключаем также и file error им палочкой
[01:19 - 01:35] теперь давайте пройдемся по некоторым принципиально моментам которые касаются использования было важно помнить что частичную специализацию шаблонной параметры по умолчанию есть только у шаблонов класс для шаблона функций подобно поведения реализуется при помощи перегрузки шаблонов
<img width="50%" src="https://ucarecdn.com/c3ef0a57-3c47-430a-b1b4-977811b9f113/">
[01:35 - 01:53] зато у шаблонных функций есть возможность вывести значение шаблонных параметров при вызове то есть если при вызове по типам аргументов которые переданы функцию можно однозначным образом выяснить значение шаблоны параметров то компилятор может это сделать за программист более там мы научились
[01:53 - 02:08] подобное поведение для шаблонов классов при помощи шаблонов мы также обсудили разницу между перегрузкой шаблонной функции и полный специализации шаблонных и пришли к выводу что предпочтительнее использовать перегрузку
[02:08 - 02:24] потому что специализацию шаблонной функции имеет некоторые ограничения и иногда она может просто не вызывать еще 1 тонкий момент связанный с помню специализацией заключается в общем то здесь полная специализацию шаблона не является шаблон для шаблонов это означает что
[02:24 - 02:38] функцией не являетесь поэтому если мы такую полную специализацию шаблонной функции определяем заголовочном файле то мы должны явным образом описать его как он лайн в либо разбить на объявления в заголовочном файле и реализацию перепевали
<img width="50%" src="https://ucarecdn.com/0e3455bd-841d-415f-bca7-397c0062dd8c/">
[02:38 - 02:55] для шаблонов классов это означает что полное специализации шаблона класса не является шаблоном класса а значит на компилируете как обычный класс использования объектной интересно программирование и шаблонов довольно ограничена дело в том что виртуальные методы
[02:55 - 03:14] конструктор по умолчанию конструктор копирования оператор присваивания деструктор не могут быть шаблонными поэтому использование шаблонов обе картины пока не так как раньше но закончить наше время хочется вобщем стилистическим совет используйте товаров для длинных свободных или
[03:14 - 03:32] если вы будете довольно много использовать шаблона то среднестатическая имя вашем коде будет 57 и того чтобы не таскать полное название шаблона собой используйте тогда но при этом придумываете разумные имена для шаблонных классов