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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2022, 01:10   #1
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
Восклицание Как правильно построить этот код, для запуска рекурсии?

На базе этого кода https://programmersforum.ru/showthread.php?t=337101 был создан объект Tuple<char,short,int,long long> tpl;, Далее я хочу построить такой код который сможет смотреть 2 списка и по условию формировать конечный тип чтобы построить нужный список типов.
Код:
template <int a>
struct __char{char arr_[a];};//template<char,short,int,long long>
template <int C= sizeof(long long),int Z =0,template <int> class K=__char >
class pass{
//условие ниже макет
public: typedef typename conditional<(Z+1==1),decltype(tpl.set<Z+1>()),K<Z+1>>::type alt;
 
};
 
template<typename pass<>,int C= sizeof(long long),int Z =0>
class lass:public pass<C,Z>{//pass::alt
 
typedef typename lass<pass::alt,C-1,Z + 1>::Result Tail;
 
public:
    typedef Typelist<pass::alt, Tail> Result;
};
 
template <int Z>
class lass<pass::alt,Z>
{
public:
    typedef NullType Result;
};
Данный код представляет макет. У меня возникает проблема в построении класса lass. Я не знаю как правильно оформить элемент pass, там есть параметр template <int> class K и не понятно как правильно работать с аргументом pass, если у нас здесь двойной шаблон. Что касаемо объекта tpl то он довольно легко передаётся.
Код:
template<typename T1 = Tuple<char,short,int,Dt>>
class MakeList1{typedef T1 Tail;};
Я не знаю будет ли он разименовываться через точку но надеюсь будет. Я по не знаю влепил здесь наследование, мне кажется оно не нужно. Ребята подскажите пожалуйста как правильно построить эти классы.
Loksiin12 вне форума Ответить с цитированием
Старый 21.11.2022, 12:20   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Забаньте уже тролля.
waleri вне форума Ответить с цитированием
Старый 21.11.2022, 20:35   #3
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Забаньте уже тролля.
лучше подскажи как решать задачу и правильно прописать параметры.

Последний раз редактировалось Loksiin12; 21.11.2022 в 20:40.
Loksiin12 вне форума Ответить с цитированием
Старый 22.11.2022, 04:35   #4
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Так пробую тоже не получается
Код:
template <int a>
struct __char{char arr_[a];};
template <int Z =0,template <int> class K=__char >
class pass{

public: typedef typename conditional<(Z+1==1),decltype(tpl.set<Z+1>()),K<Z+1>>::type alt;

};

template<class pass<>*S,int C= sizeof(Dt),int Z =0>
class lass:public pass<Z>{

typedef typename lass<typename lass::alt,C-1,Z + 1>::Result Tail;

public:
    typedef Typelist<typename lass::alt, Tail> Result;
};
Loksiin12 вне форума Ответить с цитированием
Старый 25.11.2022, 03:53   #5
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Забаньте уже тролля.
Да не тролль он, его просто укусил Александреску, и теперь он пишет 10-этажные шаблоны, вместо того чтобы писать нормальный код. В качестве лечения можно почитать исходники Doom 3, ну и конечно окропляться святой водой 3 раза в день до еды. Так можно изгнать беса.
Пётр Седов вне форума Ответить с цитированием
Старый 25.11.2022, 05:08   #6
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
укусил Александреску
укусил понравилось, классная технология но слабо развита. Всё. Работаем с тем что есть.
Loksiin12 вне форума Ответить с цитированием
Старый 25.11.2022, 06:02   #7
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 965
По умолчанию

waleri, он не тролль, просто программирование - это не его )) На двух форумах человек уже больше года изобретает то ли std::tuple, то ли std::variant

но использует компилятор старого стандарта (до 11), потому что (я уже не помню, почему).

ему один человек накидал пример шаблона с рекурсией, где без стакана сложно разобраться. Вот ТС до сих пор разбирается. Я ему намекал, что разбираться нужно с самых азов. Так ведь, нет, пытается сразу со сложным. Дорога в никуда
Алексей1153 вне форума Ответить с цитированием
Старый 25.11.2022, 06:59   #8
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
ему один человек накидал пример шаблона с рекурсией, где без стакана сложно разобраться. Вот ТС до сих пор разбирается. Я ему намекал, что разбираться нужно с самых азов. Так ведь, нет, пытается сразу со сложным. Дорога в никуда
Я тогда остыл к этой теме а теперь взялся. Ну а так да как увидел эти штуки спрашивал. Ваши объяснения пересматривал много раз. Интересно эксперементирую, что они умеют а что нет. Есть задумки которые буду реализовывать в ближайшее время.
Loksiin12 вне форума Ответить с цитированием
Старый 25.11.2022, 07:02   #9
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
но использует компилятор старого стандарта (до 11), потому что (я уже не помню, почему).
На форумах мне чётко ответили что то что я хочу провернуть меняющийся тип не возможно, так что какой компилятор значения не имеет, если оно никак не работает и нельзя проверить и вернуть строго указанный по условию тип. Мне дали 14ый стандарт установил система легла. На каком-то американско канале человек показал как новые компиляторы через командную строку скачивать. Я не разобрался. Там ещё не дай Бог лицензия нужна. А у меня к сожалению дополнительных почек нет, можно было бы продать если бы были.
Loksiin12 вне форума Ответить с цитированием
Старый 25.11.2022, 07:23   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 965
По умолчанию

Loksiin12, осознай такую простую вещь: невозможно вернуть из функции ТИП. И невозможно ТИП передать в функцию. Тип задаётся в программе жёстко и навсегда.

Передавать и возвращать в/из функции можно экземпляры объектов.

в параметрах шаблонов указываются типы или константы времени компиляции. Алиасы (typedef) внутри и снаружи классов - это тоже типы.

В программе можно предусмотреть список определённых типов (и этот набор невозможно поменять в рантайме). В рантайме можно каким-то образом манипулировать индексом из этого списка. То есть, не тип меняется в рантайме, а индекс. По индексу мы узнаём, какой именно тип из списка сейчас активен. Так работает std::variant
Алексей1153 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно ответить на этот вопрос? NYork Помощь студентам 2 18.01.2015 16:00
Как правильно ответить на этот вопрос? NYork Помощь студентам 1 05.01.2015 14:37
Построить правильно выборку на обновление pavelitel Microsoft Office Access 1 20.10.2012 00:47
Как правильно построить ER диаграмму dymych Помощь студентам 1 29.01.2010 10:43
Как правильно построить индексы? Olga_3005 SQL, базы данных 1 04.09.2009 23:02