Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2020, 13:19   #41
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
здесь ничего не крутится. Здесь T - головной тип, U - хвост (все последующие типы из списка. Но этот список - он не явно задан, а имитируется при помощи Typelist)
Значит также как и выше объясняли, понятно теперь
Loksiin12 вне форума Ответить с цитированием
Старый 27.10.2020, 13:25   #42
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

поставь себя на место компилятора и попробуй инстанцировать шаблон

во время любой подстановки (в том числе и рекурсивной) компилятор выбирает наиболее подходящую специализацию, затем создаёт класс по шаблону, причём определение этого класса размещает ДО места инстанцирования (оно и понятно - чтобы при компилировании потом возможно было этот класс использовать)
Алексей1153 вне форума Ответить с цитированием
Старый 27.10.2020, 13:26   #43
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

получается этакий лес классов. Причём мы их не вручную расписываем, а их создаст сам компилятор - в этом и заключается МЕТАпрограммирование. В метапрограммировании переменными являются КОНСТАНТЫ и ТИПЫ - всё это вычисляется и известно на этапе компиляции
Алексей1153 вне форума Ответить с цитированием
Старый 27.10.2020, 13:29   #44
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
struct Length<char>;//нет тела структуры - ошибка компиляции

struct Length< Typelist<int, char> >
{
enum { value = 1 + Length<char>::value };//ошибка компиляции
};
Я так раньше писал экспериментировал struct Length<char>; Обычная ошибка, даже не понятно должно ли оно так работать, какаета неизвестность и не определённость, что логично.
а почему так не будет работать не знаю value = 1 + Length<char>::value, может эти элементы должны быть определены сами на основании схемы выше же и список составлен и направление шаблона задано.
Loksiin12 вне форума Ответить с цитированием
Старый 27.10.2020, 13:34   #45
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
поставь себя на место компилятора
пользователь пишет
Length<char>

компилятор ищет подходящую специализацию - подходит вот эта (тут один параметр неизвестного типа TList)
template <class TList> struct Length;

компилятор инстанцирует шаблон, получается класс
struct Length<char>;

это просто объявление класса Length<char>. Тела класса нет - использовать такой класс не получится (кроме как для объявления указателя или ссылки)
Алексей1153 вне форума Ответить с цитированием
Старый 27.10.2020, 13:40   #46
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
во время любой подстановки (в том числе и рекурсивной) компилятор выбирает наиболее подходящую специализацию, затем создаёт класс по шаблону, причём определение этого класса размещает ДО места инстанцирования (оно и понятно - чтобы при компилировании потом возможно было этот класс использовать)
Меня интересовал вопрос если к примеру число маленькое и подходит shor а потом оно растёт и нужен int т.е. замена одной переменной на другую, единственный вариант решающий эту проблему пока кортежи, но это трохи накладно, если бы его в корне можно было бы заменить золотыми бы программы были.
Loksiin12 вне форума Ответить с цитированием
Старый 27.10.2020, 13:40   #47
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

уточню, что Length<char> является именно именем класса, можно его так воспринимать.
Хотя вручную так объявить имя класса не получится. Компилятор внутри использует имена, условно говоря, такие

Length_char_
Алексей1153 вне форума Ответить с цитированием
Старый 27.10.2020, 13:41   #48
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
если к примеру число маленькое и подходит shor а потом оно растёт и нужен int
шаблоны тут ни при чём, просто возьми наибольший по размеру тип
Алексей1153 вне форума Ответить с цитированием
Старый 28.10.2020, 17:21   #49
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Length<char>
Ну вектора тоже так объявляются, но я то векторами не занимаюсь.
А этот кортёж он строится как стек, создаётся каждый отдельный уровень на который отдельно затрачивается память и когда нужно программа обращается в этот слой?
Loksiin12 вне форума Ответить с цитированием
Старый 28.10.2020, 17:40   #50
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
кортёж
кортеж (читается кортЭж)


Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
строится как стек, создаётся каждый отдельный уровень на который отдельно затрачивается память и когда нужно программа обращается в этот слой?
сам шаблон ничего и нигде не занимает. Но при инстанцировании компилятор порождает классы и функции. А сам экземпляр такого кортежа <char,int,float,double> в озу будет занимать ровно столько же места, как подобная ему структура

Код:
struct
{
    char;
    int;
    float;
    double;
}var;
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разобраться с кодом 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