Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 26.10.2020, 06:52   #21
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 63
По умолчанию

Так что сравнивать простые переменные и такие штуки 2 огромные разницы что даже не понимашь толком что это такое.
Loksiin12 вне форума Ответить с цитированием
Старый 26.10.2020, 07:05   #22
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
typedef Typelist<T1, typename MakeList<T2>::Result/*Tail*/> Result;
Если я правильно понял инструкцию то это читается так мы находим объект Result с помощью оператора области видимости :: в MakeList<T2> но возникает вопрос а где создан Result, я смотрю вы упростили немного конструкцию и записали по другому, вы создали ещё один Result
Код:
Typelist<T1, typename MakeList<T2>::Result>Result;
Loksiin12 вне форума Ответить с цитированием
Старый 26.10.2020, 07:26   #23
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 353
По умолчанию

Loksiin12,

Код:
template <typename H, typename T>
struct Typelist
{
    typedef H head; 
    typedef T Tail;
};
эта структура этот шаблон класса используется для имитации кортежа:
тип H - голова списка типов
тип T - список всех лежащих далее типов

Код:
class NullType{ };
- это класс - пустой тип (маркер отстутствия типа, метапрограммный аналог void)

например, объявляем переменных-кортежей без использования нашего основного шаблона, а только про помощи Typelist:
Код:
    Typelist<NullType,NullType> types_list__null_null;
    
    Typelist<char,NullType> types_list__char_null;
    
    Typelist<char,int> types_list__char_int;
    
    Typelist<NullType,Typelist<NullType,NullType>> types_list__null_null_null;
    
    Typelist<float,Typelist<NullType,NullType>> types_list__float_null_null;
    
    Typelist<float,Typelist<char,int>> types_list__float_char_int;
таким образом получаем возможность создать тип, который содержит в себе цепочку полей с перечисленными типами
Алексей1153 вне форума Ответить с цитированием
Старый 26.10.2020, 07:31   #24
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 353
По умолчанию

а чтобы было удобно записывать типы просто через запятую, используется шаблон MakeList, в котором можно указать до 5 типов (в новых стандартах C++ есть возможность задать заранее неизвестное количество типов, то есть больше 5)
Алексей1153 вне форума Ответить с цитированием
Старый 26.10.2020, 08:58   #25
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
тип H - голова списка типов
тип T - список всех лежащих далее типов
Ну в классе MakeList это и видно, что выступает как начало и конец. Я так и писал в посте 10 https://programmersforum.ru/showpost...7&postcount=10 в принципе вы натолкнули меня на мысли.
Loksiin12 вне форума Ответить с цитированием
Старый 26.10.2020, 08:59   #26
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 63
По умолчанию

Код:
class MakeList
{
    typedef typename MakeList< T2, T3, T4, T5 >::Result Tail;
 
public:
    typedef Typelist<T1/*начало*/, Tail/*конец список остальных элемен*/> Result;
};
Loksiin12 вне форума Ответить с цитированием
Старый 26.10.2020, 09:01   #27
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 63
По умолчанию

Хорошо а зачем писать так
Код:
template <>
class MakeList<>
{
public:
    typedef NullType Result;
};
Что мы здесь делаем? Зымакаем завершаем схлопываем, что здесь происходит?
Loksiin12 вне форума Ответить с цитированием
Старый 26.10.2020, 09:02   #28
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 353
По умолчанию

вот шаблон MakeList рекурсивно и выстраивает вот такое чудовище
Цитата:
Typelist<float,Typelist<char,int>> types_list__float_char_int;
но ему нужно понять, где остановить рекурсию. А рекурсивно там вызывается он же сам (MakeList), но постепенно откусывается самый первый тип из цепи. И когда будет попытка инстанцировать MakeList с пустым списком типов, компилятор возьмёт специализацию без параметров, которая просто поставит пустую затычку. Рекурсия прервётся

Код:
template <>
class MakeList<>
{
public:
    typedef NullType Result;
};
Алексей1153 вне форума Ответить с цитированием
Старый 26.10.2020, 09:03   #29
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
стандартах C++ есть возможность задать заранее неизвестное количество типов
Ну там да можно использовать шаблон с неограниченным списком а не как здесь пишется статический список, но я не нашёл Визуал студию с 11ым стандатом или выше , то не работает то не устанавливает да и честно говоря для понимания мне кажется можно и со списком разобраться.
Loksiin12 вне форума Ответить с цитированием
Старый 26.10.2020, 09:07   #30
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 353
По умолчанию

Loksiin12, не обязательно нужно именно студию. Поставь QtCreator, с ним идёт компилятор, который поддерживает C++17
А если просто попробовать погонять код, то есть онлайн компиляторы (легко ищутся)
Алексей1153 вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разобраться с кодом Boris2 Помощь студентам 1 15.07.2013 14:58
С++ разобраться с кодом marina12 Помощь студентам 2 21.05.2013 22:22
разобраться с кодом iris_ka Помощь студентам 0 16.05.2012 16:19
Разобраться с кодом. Vlero PHP 2 20.01.2011 12:46
проблемка с кодом, результат получается немного не такой как надо hen Помощь студентам 3 24.04.2009 14:11


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя