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

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

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

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

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

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

может это так и происходит. Также мне не понятно почему здесь используется
Код:
typedef Typelist<T1, Tail> Result;
2 параметра T1, Tail получается тоже замыкание на верхнюю строку.
Loksiin12 вне форума Ответить с цитированием
Старый 24.10.2020, 09:30   #12
petya11
Пользователь
 
Регистрация: 27.09.2019
Сообщений: 68
По умолчанию

Поэтому вам и посоветовал, прочесть туториал, книги. Зачем вы пытаетесь сами "чудить". Не нужно рассказывать своими словами то, у чего есть конкретные названия. Есть аргументы и параметры, есть передача по значению и ссылке.

Изучите информацию, используйте подходящие термины и вам самим станет все куда яснее. Не будет "китайского объяснения" и в мыслях все будет по полочкам, а не своими словами.
petya11 вне форума Ответить с цитированием
Старый 24.10.2020, 20:52   #13
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от petya11 Посмотреть сообщение
Изучите информацию, используйте подходящие термины и вам самим станет все куда яснее. Не будет "китайского объяснения" и в мыслях все будет по полочкам, а не своими словами.
Я изучил тоны материалов, но мой пример много сложнее, ни в книжках ни на сайтах я такого не видел, человек с опытом накидал этот код а я пытаюсь разобраться, интуититвно я понимаю что здесь происходит но составить что-то подобное не смогу.
Loksiin12 вне форума Ответить с цитированием
Старый 25.10.2020, 09:18   #14
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Loksiin12,

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Разберись, например, что происходит тут.Расскажи, что понял

Код:
template<typename T>
class MyClass
{
     T arr[10];
};

int main()
{
    MyClass<int> a1;
    MyClass<double> a2;
}
Алексей1153 вне форума Ответить с цитированием
Старый 25.10.2020, 10:12   #15
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
class MyClass
{
     T arr[10];
};

int main()
{
    MyClass<int> a1;
    MyClass<double> a2;
}
Объявлен класс с именем MyClass, к нему применён шаблон, что в свою очередь позволит формировать все его методы переменные и параметры любого нужного типа. Тоже самое можно делать и внутри функции. Далее создано 2 объекта a1 и a2. 1ый объект будет типа int 2ой double. Но опять же у меня примеры по сложнее.
Loksiin12 вне форума Ответить с цитированием
Старый 25.10.2020, 12:52   #16
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Loksiin12, нет, неправильно

template<typename T> class MyClass - это не класс, это шаблон класса. Никакого класса ещё не существует, так как этим шаблоном ещё не воспользовались (не инстанцировали - явно или неявно)

Цитата:
MyClass<int> a1;
тут одновременно два события:
1) инстанцирование шаблона MyClass с параметром int. Теперь существует класс MyClass<int>, внутри которого есть массив int arr[10]
2) объявление объекта типа MyClass<int>.
Алексей1153 вне форума Ответить с цитированием
Старый 25.10.2020, 16:41   #17
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
template<typename T> class MyClass - это не класс, это шаблон класса. Никакого класса ещё не существует, так как этим шаблоном ещё не воспользовались (не инстанцировали - явно или неявно)
Ну понятно. Ну кратко я описал но это никакого отношения к моим записям не имеет т.к. у меня и рекурсии и typedef, элементы связанные с периодом времени компиляции, так что мне бы мои элементы понять. А об этих простых штуках в сети инфы полно.
Loksiin12 вне форума Ответить с цитированием
Старый 25.10.2020, 17:13   #18
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Loksiin12, так начинать нужно с малого, а не кидаться сразу в болото метапрограммирования.

typedef - это всего лишь псевдоним для класса

если с моим простым примером разобрались, то давай дальше.
Вот максимльно упрощённый пример из первого сообщения. Расскажи, что тут видишь. Приведи код, который пришлось бы написать, если бы шаблонов не существовало

Код:
template <class H, class T>
struct Typelist
{
    typedef H head; 
    typedef T Tail;
};

class NullType{ };
 
template <typename T1 = NullType, typename T2 = NullType>
class MakeList
{
    //typedef typename MakeList<T2>::Result Tail;
 
public:
    typedef Typelist<T1, typename MakeList<T2>::Result/*Tail*/> Result;
};
 
template <>
class MakeList<>
{
public:
    typedef NullType Result;
};


int main()
{
    MakeList<char,int>::Result tpl;
}
Алексей1153 вне форума Ответить с цитированием
Старый 26.10.2020, 06:47   #19
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
template <class H, class T>
struct Typelist
{
    typedef H head; 
    typedef T Tail;
};
В mql4 такое даже не компилируется но если вместо класс подставить typename то работает. Ну в целом по одной структуре сказать что-то нельзя. Даже не понятно почему с неё всё и начинается. Может структуру можно было бы написать с обычными переменными, мне кажется тут нужно смотреть несколько шире.
Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
class NullType{ };
 
template <typename T1 = NullType, typename T2 = NullType>
Я читал Александреску и кучу других материалов то пустые классы используются или чтобы рекурсию схлопнуть закрыть или чтобы работать с любым типом. В общем грубо говоря мне уже тут не понятно ничего. Я же и пишу что только интуитивно понимаю как это работает но вникнуть в детали и собрать такое я уже не смогу.
Loksiin12 вне форума Ответить с цитированием
Старый 26.10.2020, 06:50   #20
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
template <>
class MakeList<>
{
public:
    typedef NullType Result;
};
Мне объяснили что этот класс используется чтобы завершить инстанцию этого класса


Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Код:
template <typename T1 = NullType, typename T2 = NullType>
class MakeList
{
    //typedef typename MakeList<T2>::Result Tail;
 
public:
    typedef Typelist<T1, typename MakeList<T2>::Result/*Tail*/> Result;
};
но зачем это надо мне не понятно.
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