Step 5 (S-11550)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/567/step/5

Step 5 (S-11550) 1.png

[00:00 - 00:16] 1 из техник которое применяется шаблонности + это использование зависимостями давайте разберем это на следующем примере шаблоном краснодара при определении шаблонного класса можно определите такой синоним для типа которые соответствуют типу элементов хранимых данных моисею


[00:16 - 00:31] не назвать этот синонима вылетает это стандартное имя для такого типа синонимов которые определяются в шаблонах контейнеров тогда до какого то конкретного типа массива например для рф от int


Step 5 (S-11550) 2.png

Step 5 (S-11550) 3.png

[00:31 - 00:49] можно будет написать re от into двоеточие двоеточие вылетает и это будет соответствовать типу элементов данного массива то есть будет соответствовать типу и таким образом для такого короткого поэтому придумали такой длинный длинный сигнал


Step 5 (S-11550) 4.png

[00:49 - 01:06] зачем это нужно а нужно это для использования внутри шаблона функции шаблонов методов шаблонов класс внутри шаблона функции например можно будет по типу контейнера получить тип элемента который хранится в данном контексте это очень удобно давайте рассмотрим это на личном примере


Step 5 (S-11550) 5.png

[01:06 - 01:22] предположим мы хотим определить шаблоны функцию content которые принимают некоторые контейнер некоторое значение проверяет есть ли это значение среди элементов данного контейнера например она принимает double


[01:22 - 01:38] число 3,5 и проверяет есть ли 3,5 в этом массиве как это делается но нам надо каким то образом определить функции которой примет контейнер а в качестве 2 параметра передают некоторый тип которые соответствуют


Step 5 (S-11550) 6.png

[01:38 - 01:55] элементов хранения данных контейнеров контейнер и значении должны того же типа что элемент и вот здесь как раз нужно такое зависимостями то есть мы определяем шаблонную функцию с 1 шаблоном параметрам этот параметр


Step 5 (S-11550) 7.png

[01:55 - 02:11] типовые шаблоны параметры соответствуют content в качестве 1 аргумента данной функции мы передаем по константной ссылке экземпляр данного контейнера по константы потому что мне нужно менять контейнер нужно просто передать его элементов


Step 5 (S-11550) 8.png

[02:11 - 02:26] а в качестве 2 аргумента мы передаем значение типа которые соответствуют типу элементов данного контейнера здесь мы используем зависимостями контейнер type и таким образом данная функция будет работать


Step 5 (S-11550) 9.png

[02:26 - 02:45] с любым контейнерам которого объявлены данной зависимая ну например с нашим шаблонам типом можем объявить переменную вызвать функцию контент при этом за счет вывода параметров шаблоны функцию компилятор сам


Step 5 (S-11550) 10.png

Step 5 (S-11550) 11.png

Step 5 (S-11550) 12.png

[02:45 - 03:00] догадаются что тип контейнера соответствуют я агент а значит 2 параметр соответствует важно отметить что


[03:00 - 03:17] зависимых нем есть некоторые ограничения связанные с процессом компиляции шаблонов дело в том что синтаксис проверяется немного раньше чем компилируется шаблоны и до компиляции шаблонов непонятно чему соответствуют данные выражения то есть мы здесь


Step 5 (S-11550) 13.png

[03:17 - 03:34] как авторы данного шаблона класса знаем что даны выражения соответствует типу точнее синонимы который определял внутри класса но компилятора то не всегда понятно и он может предположить например что


Step 5 (S-11550) 14.png

Step 5 (S-11550) 15.png

[03:34 - 03:52] данное выражение соответствующий типу а некоторым историческим и поля которые объявлены 3 то шаблонную класс чтобы компилятор не запутать нам нужно ему явно указать что данная зависимость имя соответствует типу и дятлов используется


[03:52 - 04:08] ключевое слово тайной то есть если мы в некотором шаблонов нет или шаблонным классе шаблонной функции используем зависимо имя которое зависит от шаблонного параметра то мы должны перед ним указать ключевое слово