|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.10.2020, 13:19 | #41 |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
|
27.10.2020, 13:25 | #42 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
поставь себя на место компилятора и попробуй инстанцировать шаблон
во время любой подстановки (в том числе и рекурсивной) компилятор выбирает наиболее подходящую специализацию, затем создаёт класс по шаблону, причём определение этого класса размещает ДО места инстанцирования (оно и понятно - чтобы при компилировании потом возможно было этот класс использовать) |
27.10.2020, 13:26 | #43 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
получается этакий лес классов. Причём мы их не вручную расписываем, а их создаст сам компилятор - в этом и заключается МЕТАпрограммирование. В метапрограммировании переменными являются КОНСТАНТЫ и ТИПЫ - всё это вычисляется и известно на этапе компиляции
|
27.10.2020, 13:29 | #44 | |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
Цитата:
а почему так не будет работать не знаю value = 1 + Length<char>::value, может эти элементы должны быть определены сами на основании схемы выше же и список составлен и направление шаблона задано. |
|
27.10.2020, 13:34 | #45 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
пользователь пишет
Length<char> компилятор ищет подходящую специализацию - подходит вот эта (тут один параметр неизвестного типа TList) template <class TList> struct Length; компилятор инстанцирует шаблон, получается класс struct Length<char>; это просто объявление класса Length<char>. Тела класса нет - использовать такой класс не получится (кроме как для объявления указателя или ссылки) |
27.10.2020, 13:40 | #46 | |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
Цитата:
|
|
27.10.2020, 13:40 | #47 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
уточню, что Length<char> является именно именем класса, можно его так воспринимать.
Хотя вручную так объявить имя класса не получится. Компилятор внутри использует имена, условно говоря, такие Length_char_ |
27.10.2020, 13:41 | #48 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
шаблоны тут ни при чём, просто возьми наибольший по размеру тип
|
28.10.2020, 17:21 | #49 |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
|
28.10.2020, 17:40 | #50 | |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
кортеж (читается кортЭж)
Цитата:
Код:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разобраться с кодом | Boris2 | Помощь студентам | 1 | 15.07.2013 15:58 |
С++ разобраться с кодом | marina12 | Помощь студентам | 2 | 21.05.2013 23:22 |
разобраться с кодом | iris_ka | Помощь студентам | 0 | 16.05.2012 17:19 |
Разобраться с кодом. | Vlero | PHP | 2 | 20.01.2011 12:46 |
проблемка с кодом, результат получается немного не такой как надо | hen | Помощь студентам | 3 | 24.04.2009 15:11 |