Step 5 (S-11550)

From Stepik Wiki
Revision as of 11:20, 21 March 2017 by Admin (Talk | contribs) (Create page for step id=11550)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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

<img width="50%" src="https://ucarecdn.com/ebbfb3e9-e48f-43f7-80bd-21b0a0ff9bdb/">

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


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


<img width="50%" src="https://ucarecdn.com/72ff2bdd-ed55-4742-ad84-189be576f2f0/">

<img width="50%" src="https://ucarecdn.com/beba794a-5eca-4f30-96c7-dffc090a0066/">

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


<img width="50%" src="https://ucarecdn.com/60f975e0-9904-4b85-80bf-e48bbe2f9039/">

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


<img width="50%" src="https://ucarecdn.com/c42fa3e9-8e54-4f37-aa1e-ae721ff2460c/">

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


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


<img width="50%" src="https://ucarecdn.com/44bd1a2d-856f-4445-85bb-56fb8fb35736/">

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


<img width="50%" src="https://ucarecdn.com/baed5925-82c6-4437-8a40-94b50d017db2/">

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


<img width="50%" src="https://ucarecdn.com/c433bdd6-47c6-4656-adb3-6b0cff9d06f2/">

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


<img width="50%" src="https://ucarecdn.com/e8d9b165-e988-43da-bf4e-0f794067ae9d/">

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


<img width="50%" src="https://ucarecdn.com/2b65b4a4-d1bc-4ab0-ad85-5c2033d3f36c/">

<img width="50%" src="https://ucarecdn.com/78283c8f-1066-43fd-960c-c057abd71887/">

<img width="50%" src="https://ucarecdn.com/f8ef89bd-2c65-41ca-abc5-e3493543696e/">

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


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


<img width="50%" src="https://ucarecdn.com/43e5a42c-d032-4290-8753-8c028095e721/">

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


<img width="50%" src="https://ucarecdn.com/ccf7154c-6609-46a1-b106-82cc8bf33306/">

<img width="50%" src="https://ucarecdn.com/076f88c8-5a7f-47cd-93a9-cdb3d5ac4efd/">

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


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