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

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

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

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

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

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

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
TupleForEach_<Tuple, (I - 1)>::run(tpl, f);
А почему здесь меняется I мы же его не декрементируем и не инкрементируем, программа что считает рекурсии и присваивает значение в I?
Loksiin12 вне форума Ответить с цитированием
Старый 15.12.2020, 08:04   #82
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Loksiin12, I - константа, она не может меняться

она и не меняется

порождается новый инстанс экземпляра шаблонного класса с типом TupleForEach_<Tuple, (I - 1)>

если всё началось с I==3 , то последовательно появятся определения классов с типами
TupleForEach_<Tuple, 2>
TupleForEach_<Tuple, 1>
TupleForEach_<Tuple, 0>

-----------
тебе же на двух форумах пишут - начни с основ. С C++ без шаблонов. То, что ты не пользуешься классами - твой минус. На самом деле ими невозможно не пользоваться, и ты ими всё же пользуется, просто тело класса размазано у тебя по всему коду и его сложно увидеть, отлаживать и модифицировать.
Подойди к написанию кода правильно - научись работать с классами.

Или не удивляйся, что тебе перестают отвечать на вопросы
Алексей1153 вне форума Ответить с цитированием
Старый 15.12.2020, 20:57   #83
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
если всё началось с I==3 , то последовательно появятся определения классов с типами
И всё же происходит имитация декремент или инкремент, значит всё же оно автоматически себя считает. Тут видите дело даже не в классах логика мне вся не до конца ясна, видимо через лет 10 15 пока не поймёшь все детали не разберёшься. Классы я изучал но тут идёт объёмность тем, например мне не понятно когда можно использовать typedef почему он ниже или выше, в каком поле находить объект, Logh_cl<int>::*Logih, как рекурсию остановить запустить какими грамотными условиями. А ещё пользователи приводят примеры разные и фактически идёт сначала одна специализация а потом другая. Я вообще придумал как работать без типов, пока не реализовал, я хочу использовать только 3 типа: 1ый char 2ой long long (вещественные числа у меня одного типа на приводятся к double) и 3ий в качестве указателя int или есть универсальный тип указателей in_ptr я его не тестировал поэтому не знаю будет ли он равен размеру указателя или тоже не надёжный. Я за 5 лет не видел ни одного достойного объекта класса кроме инстанцирования шаблонов, а создавать объект класса а потом ставить точку добираться к методу или к подобъекту приводит к увеличению кода, к сложности и трудноотлаживаемости поэтому я как их понял сразу перестал использовать, все вещи собираю на обычных переменных, инстанцирование даст мне небольшие модификации но оно мне пока не даётся.
Loksiin12 вне форума Ответить с цитированием
Старый 16.12.2020, 12:29   #84
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
И всё же происходит имитация декремент или инкремент, значит всё же оно автоматически себя считает.
Нет, происходит банальная рекурсия:
Код:
void func(int a)
{
  ...
  func(a-1);
}
Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
мне не понятно когда можно использовать typedef
Когда надо объявить псевдоним типа.

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

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
в каком поле находить объект
Может наоборот?

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
как рекурсию остановить запустить какими грамотными условиями
Ну это к математике и алгоритмам вопрос. Начните с трацдиционных рекурсивных задач - факториал, фиббоначи, ...

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

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
или есть универсальный тип указателей
void*

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
Я за 5 лет не видел ни одного достойного объекта класса кроме инстанцирования шаблонов
Чего? Инстанцированный шаблон функции стал объектом? Или вы пропустили главу класы?

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
а создавать объект класса а потом ставить точку добираться к методу или к подобъекту приводит к увеличению кода
Не всегда. А 10 инстанцированных функций на каждый тип параметра не раздувает код?

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
к сложности и трудноотлаживаемости поэтому я как их понял сразу перестал использовать
Сразу видно - вы их не поняли.

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
инстанцирование даст мне небольшие модификации
Чего?
FrosyaZZ вне форума Ответить с цитированием
Старый 19.12.2020, 21:57   #85
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
факториал, фиббоначи
Его можно посчитать без рекурсий используя обычные указатели и потратить при этом кода намного меньше.
Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Не всегда. А 10 инстанцированных функций на каждый тип параметра не раздувает код?
В Сообщении выше я указал что вообще от них избавился и у меня только 2 типа на 1 и 8 байт (ну и тип указателя потому что без них программы не работают), ну и промежуточные все 8ем но там не используются эти int short и прочая лабуда, я просто читаю нужное количество байт например 3 или 5ть, правда не реализовал ещё слишком зацикливался на этом инстанцировании. Но в любом случае я без классов могу написать что угодно кроме перегрузки операторов.
Loksiin12 вне форума Ответить с цитированием
Старый 19.12.2020, 22:09   #86
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
у класса нет "нижней" или "верхней" части.
Т.е. всё что внутри него срабатывает одновременно?
Код:
template < 
    typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
    typename T4 = NullType, typename T5 = NullType
>
class MakeList
{
    typedef typename MakeList< T2, T3, T4, T5 >::Result Tail;
 
public:
    typedef Typelist<T1, Tail> Result;
};
Почему typedef typename MakeList< T2, T3, T4, T5 >::Result Tail; не находится в public:?
Loksiin12 вне форума Ответить с цитированием
Старый 20.12.2020, 08:09   #87
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Loksiin12, видимо, разработчик класса не хотел светить алиас наружу. Других причин не бывает
Алексей1153 вне форума Ответить с цитированием
Старый 13.11.2022, 16:34   #88
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
public:
typedef Typelist<T1, typename MakeList<T2>::Result/*Tail*/> Result;
Такой вопрос. Значит вот допустим код из темы.
Код:
template < 
    typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
    typename T4 = NullType, typename T5 = NullType
>
class MakeList
{
    typedef typename MakeList< T2, T3, T4, T5 >::Result Tail;
 
public:
    typedef Typelist<T1, Tail> Result;
};
Можно ли в строке typedef Typelist<T1, Tail> Result; узнать сколько байт занимает Tail и с учётом этой переменной учсложнить вырожение?

Последний раз редактировалось Loksiin12; 13.11.2022 в 16:37.
Loksiin12 вне форума Ответить с цитированием
Старый 13.11.2022, 17:46   #89
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Loksiin12, sizeof(Tail)
Алексей1153 вне форума Ответить с цитированием
Старый 13.11.2022, 17:59   #90
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
sizeof(Tail)
Мне пользователь объяснил что размер можно снимать так:int+char(это 5 байт), далее int+char+double(это 13), 1ая итерация Т1 уже учтена(4байта). Получается на последней итерации 13 байт будет отдавать если фиксировать куда-то потому что сама схема его не фиксирует этого нет в коде.
Loksiin12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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