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

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

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

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

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

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

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

Цитата:
Сообщение от Алексей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
Сообщений: 947
По умолчанию

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
Сообщений: 947
По умолчанию

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

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

Код:
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
Сообщений: 136
По умолчанию

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

вот шаблон 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
Сообщений: 136
По умолчанию

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

Loksiin12, не обязательно нужно именно студию. Поставь QtCreator, с ним идёт компилятор, который поддерживает C++17
А если просто попробовать погонять код, то есть онлайн компиляторы (легко ищутся)
Алексей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