Заработай до
50000$
на приглашении друзей
получить StartUp Bonus
от ИнстаФорекс
Вложений не требуется!
Начни торговлю
без вложений и риска
С новым STARTUP бонусом 1000$
Получи бонус
55%
от ИнстаФорекс
на каждое пополнение
Ответить в теме
Страница 1 из 3
1 2 Последняя ◄╝

Показаны сообщения: с 1 по 20 из 47

Тема: Шаблоны кода в MQL

 Перейти в классический вид темы
     
  1. ТОП сообщений
    2018-01-16   13:37
    Лучший ответ #1
    Накопленные выплаты 29274 RUB

    Пока всё предельно ясно! ожет потому что я уже сам стараюсь перейти на ООП парадигму и более или менее знаком с терминологией и функционалом, посмотрим что дальше будет интересного!? P.S. главное продолжайте, думаю со временем народ подтянется! И в качестве отступления, не покажите пример создания шаблонов функций, да так что бы она возвращала шаблонный тип, а то я пока смог добиться возврата только через передачу параметра функции по ссылке! //+------------------------------------------------------------------+ //| Определяет время или индекс - начала или конца сессии | //+------------------------------------------------------------------+ template void Session (const string Symb, const int Timeframe, T &result, const bool start, const bool debug = false) { if (debug){ Print(__FUNCSIG__);} //--- datetime time = iTime(Symb, Timeframe, 0); MqlDateTime str1; TimeToStruct(time, str1); str1.hour = TimeHour(StrToTime(StartTime)); str1.min = TimeMinute(StrToTime(StartTime)); str1.sec = 0; datetime time1 = StructToTime(str1); MqlDateTime str2; TimeToStruct(time, str2); str2.hour = TimeHour(StrToTime(EndTime)); str2.min = TimeMinute(StrToTime(EndTime)); str2.sec = 0; datetime time2 = StructToTime(str2); //--- while (time1 > time || TimeDayOfWeek(time1) == 0 || TimeDayOfWeek(time1) == 6){ time1 -= PERIOD_D1 * 60;} while (time1 > time2 || TimeDayOfWeek(time2) == 0 || TimeDayOfWeek(time2) == 6){ time2 += PERIOD_D1 * 60;} //--- if (typename (T) == typename (int)){ if (start){ result = iBarShift(Symb, Timeframe, time1, false);} else { result = iBarShift(Symb, Timeframe, time2, false);}} if (typename (T) == typename (datetime)){ if (start){ result = (T) time1;} else { result = (T) time2;}} //--- if (debug){ Print(result);} } А хочется, что бы функция возвращала мне результат, да ещё и нужного мне типа или время или индекс бара!

    2018-01-16   17:46
    Лучший ответ #2
    Накопленные выплаты 91106 RUB

    Насчет правильности подхода судить не буду - ветка не об этом. А по существу T Session (const string Symb, const int Timeframe, T &result, const bool start, const bool debug = false) // тело функции пропускаю if (debug){ Print(result);} return result; }

    2018-01-17   11:31
    Лучший ответ #3
    Накопленные выплаты 155746 RUB

    Вот потому и не уразумел, что ты пытаешься прикрутить шаблон там, где его использование не имеет смысла. Суть шаблона в том, что это всего лишь образец(заготовка) кода, на основе которой компилятор может нагенерить кучу перегруженных функций, одинаковых по сути, но различных по используемым типам и их кол-во будет зависеть от того, сколько вариантов вызова шаблонной функции окажется в твоем коде по факту. Это как форма для литья металла в металлургии. При помощи одной формы ты можешь изготовить детали из разных металлов. Простой пример, сложить несколько чисел. Ежу понятно, что складывать можно числа разных типов, следовательно и результат тоже будет разного типа. Что ты можешь сделать в этом случае... 1. Написать самому кучу перегруженных функций, на все случаи жизни. 2. Написать один шаблон. В первом случае - это муторное занятие, т.к. чем больше вариантов на входе, тем больше функций тебе надо набивать ручками. Во втором случае - ты делаешь один шаблон, а компилятор на его основе сам генерит нужное кол-во самостоятельных функций(но не в исходном листинге, а в результирующем коде), предназначенных для работы с конкретным набором типов. При этом типы внутри шаблона будут зависеть только от внешних условий вызова шаблонной функции в основном коде, а совсем не от того, что программисту взбредет в голову выплюнуть наружу, в зависимости от расчетов или от значения какого нибудь там одного параметра. ЗЫ: Gold, походу мы тут слегка загадили человеку темку и ушли в отдельное другое русло... Будь добр, перенеси плиз все что касается шаблонов в отдельную темку, например "Шаблоны кода в MQL".

    2018-01-17   09:10
    Лучший ответ #4
    Накопленные выплаты 18083 RUB
    2018-01-17   11:04
    Лучший ответ #5
    Накопленные выплаты 18083 RUB

    Да странно, и удивительно но это так. В документаций все примеры с передачей параметра через ссылку в функцию, поэтому это скорей всего единственный путь. Но все равно просвещайтесь это не плохо.

    2018-01-16   17:28
    Лучший ответ #6
    Накопленные выплаты 155746 RUB

    Ну... Касательно MQL - естественно нет. А поскольку ноги у шаблонов MQL растут из С++, то туда тебе и прямая дорога. Вики, книги и т.п. Правда там тоже далеко не везде описание применения шаблонов доступно для понимания новичкам. Я слегка погуглил и нашел более менее адекватное описание для шаблонов на человекопонятном наречии. Правда там речь идет в русле С++ и не все конструкции сработают в MQL, но в основном годится.

  2. Линк #1 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от VDev Посмотреть сообщение
    Тупое чтение никогда ничего не дает.
    Пока всё предельно ясно! ожет потому что я уже сам стараюсь перейти на ООП парадигму и более или менее знаком с терминологией и функционалом, посмотрим что дальше будет интересного!?
    P.S. главное продолжайте, думаю со временем народ подтянется!
    И в качестве отступления, не покажите пример создания шаблонов функций, да так что бы она возвращала шаблонный тип, а то я пока смог добиться возврата только через передачу параметра функции по ссылке!
    Код:
    //+------------------------------------------------------------------+
    //| Определяет время или индекс - начала или конца сессии            |
    //+------------------------------------------------------------------+
    template 
    void Session (const string Symb, const int Timeframe, T &result, const bool start, const bool debug = false)
    {
       if (debug){
          Print(__FUNCSIG__);}
       //---
       datetime time = iTime(Symb, Timeframe, 0);
       MqlDateTime str1;
       TimeToStruct(time, str1);
       str1.hour = TimeHour(StrToTime(StartTime));
       str1.min  = TimeMinute(StrToTime(StartTime));
       str1.sec  = 0;
       datetime time1 = StructToTime(str1);
       MqlDateTime str2;
       TimeToStruct(time, str2);
       str2.hour = TimeHour(StrToTime(EndTime));
       str2.min  = TimeMinute(StrToTime(EndTime));
       str2.sec  = 0;
       datetime time2 = StructToTime(str2);
       //---
       while (time1 > time || TimeDayOfWeek(time1) == 0 || TimeDayOfWeek(time1) == 6){
          time1 -= PERIOD_D1 * 60;}
       while (time1 > time2 || TimeDayOfWeek(time2) == 0 || TimeDayOfWeek(time2) == 6){
          time2 += PERIOD_D1 * 60;}
       //---
       if (typename (T) == typename (int)){
          if (start){
             result = iBarShift(Symb, Timeframe, time1, false);}
          else {
             result = iBarShift(Symb, Timeframe, time2, false);}}
       if (typename (T) == typename (datetime)){
          if (start){
             result = (T) time1;}
          else {
             result = (T) time2;}}
       //---
       if (debug){
          Print(result);}
    }
    А хочется, что бы функция возвращала мне результат, да ещё и нужного мне типа или время или индекс бара!

    Последний раз редактировалось Viktor1987; 16.01.2018 в 13:42.

  3. post_thanks Получено лайков: 6

    Незарегистрированный (6 пользователей)

  4. Линк #2 Свернуть пост
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    6,975
    Деньги за посты (Подробнее):
    155746 RUB
    Поставил(а) лайков:
    906
    Получено лайков:  7,116
    в 3,382 сообщениях
    102%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    И в качестве отступления, не покажите пример создания шаблонов функций, да так что бы она возвращала шаблонный тип, а то я пока смог добиться возврата только через передачу параметра функции по ссылке!
    Дык в справочнике вроде как бы все разжевано.

    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    А хочется, что бы функция возвращала мне результат, да ещё и нужного мне типа или время или индекс бара!
    Опять пытаешься "объять необъятное" и "впихнуть невпихуемое", т.е. в одной функции делать кучу разнородных дел? Ты бы определился для начала, что тебе конкретно нужно, либо время, либо индекс бара (либо крестик снять, либо трусы надеть ).


  5. post_thanks Получено лайков: 2

    jareskyua (16.07.2018), Viktor1987 (16.01.2018)

  6. Линк #3 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    либо крестик снять, либо трусы надеть

    Цитата Сообщение от ir0407 Посмотреть сообщение
    Опять пытаешься "объять необъятное" и "впихнуть невпихуемое",
    Да это мой подход!
    Цитата Сообщение от ir0407 Посмотреть сообщение
    Ты бы определился для начала, что тебе конкретно нужно, либо время, либо индекс бара
    Дак по отдельности уже не интересно!
    Цитата Сообщение от ir0407 Посмотреть сообщение
    Дык в справочнике вроде как бы все разжевано.
    Если бы я понял из справочника, я бы не спрашивал! Не смог понять как реализовать нужное мне "нечто"!


  7. Линк #4 Свернуть пост
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    6,975
    Деньги за посты (Подробнее):
    155746 RUB
    Поставил(а) лайков:
    906
    Получено лайков:  7,116
    в 3,382 сообщениях
    102%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    Да это мой подход!
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    Дак по отдельности уже не интересно!
    Плохой подход. Универсальность достигается не тогда, когда ты соскирдуешь в одну функцию скопом весь хлам и будешь там им менжевать одним тебе ведомым способом, а тогда когда одна большая задача разбивается на несколько самостоятельных мелких и над ними прикручивается менеджер, который в зависимости от входных параметров выдавал бы на выход то, что запросили.
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    Если бы я понял из справочника, я бы не спрашивал! Не смог понять как реализовать нужное мне "нечто"!
    И похоже, что ты не совсем понял для чего вообще нужны шаблоны и как и когда они работают.

    Последний раз редактировалось ir0407; 16.01.2018 в 15:00.

  8. post_thanks Получено лайков: 2

    Viktor1987 (16.01.2018), Незарегистрированный (1 пользователь)

  9. Линк #5 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    И похоже, что ты не совсем понял для чего вообще нужны шаблоны и как и когда они работают.
    Да и ДА! Игорь, есть что-то толковое почитать по этому поводу?


  10. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  11. Линк #6 Свернуть пост
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    6,975
    Деньги за посты (Подробнее):
    155746 RUB
    Поставил(а) лайков:
    906
    Получено лайков:  7,116
    в 3,382 сообщениях
    102%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    Да и ДА! Игорь, есть что-то толковое почитать по этому поводу?
    Ну... Касательно MQL - естественно нет. А поскольку ноги у шаблонов MQL растут из С++, то туда тебе и прямая дорога. Вики, книги и т.п. Правда там тоже далеко не везде описание применения шаблонов доступно для понимания новичкам. Я слегка погуглил и нашел более менее адекватное описание для шаблонов на человекопонятном наречии. Правда там речь идет в русле С++ и не все конструкции сработают в MQL, но в основном годится.


  12. post_thanks Получено лайков: 3

    Gold (16.01.2018), Leschich (03.03.2018), Viktor1987 (16.01.2018)

  13. Линк #7 Свернуть пост
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    2,972
    Деньги за посты (Подробнее):
    91106 RUB
    Поставил лайков:
    623
    Получено лайков:  2,421
    в 1,402 сообщениях
    81%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение

    Насчет правильности подхода судить не буду - ветка не об этом. А по существу
    PHP код:
    T Session (const string Symb, const int Timeframe, T &result, const bool start, const bool debug = false)

    // тело функции пропускаю
    if (debug){
    Print(
    result);}
    return
    result;
    }


  14. post_thanks Получено лайков: 4

    АнтонР85 (17.01.2018), Незарегистрированный (3 пользователя)

  15. Линк #8 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от VDev Посмотреть сообщение
    А по существу
    То есть всё равно придется передать по ссылке переменную типа Т?


  16. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  17. Линк #9 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    на человекопонятном наречии
    Это следует уже из названия!
    Цитата Сообщение от Цитата
    Программирование шаблонов C++ для идиотов


  18. Линк #10 Свернуть пост
    Кандидат форумных наук
    HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация Аватар для HorseStep
    Регистрация:
    31.07.2015
    Пол:
    Мужчина
    Сообщений:
    1,876
    Деньги за посты (Подробнее):
    10991 RUB
    Поставил лайков:
    24
    Получено лайков:  415
    в 355 сообщениях
    22%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение


    Да это мой подход!

    Дак по отдельности уже не интересно!


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


    ir0407 прав - разумнее иметь набор понятных мелких функций, и вызывать их при необходимости, возможно, через менеджер.


    А по текущему вопросу - VDev прав, а если не хочешь передавать по ссылке переменную в шаблоне, ну, убери ее из списка параметров, а перед функцией - оставляй. Функция будет возвращать тип шаблона.

    Более 300 систем в советнике "Лига Торговых Систем" (графики результатов на последних страницах)
    Помоги оптимизировать одну из ТС советника (есть иллюстрированная инструкция) - и пользуйся лучшей из уже оптимизированных !

  19. post_thanks Получено лайков: 2

    АнтонР85 (17.01.2018), Незарегистрированный (1 пользователь)

  20. Линк #11 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от HorseStep Посмотреть сообщение
    Функция будет возвращать тип шаблона.
    А сами пробовали так сделать?


  21. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  22. Линк #12 Свернуть пост
    Свой человек
    АнтонР85 хорошая репутация АнтонР85 хорошая репутация АнтонР85 хорошая репутация Аватар для АнтонР85
    Регистрация:
    30.06.2016
    Пол:
    Мужчина
    Сообщений:
    622
    Деньги за посты (Подробнее):
    18083 RUB
    Поставил лайков:
    151
    Получено лайков:  272
    в 219 сообщениях
    44%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    А сами пробовали так сделать?
    Привет Виктор! Да нужно так. Нажмите на изображение для увеличения
Название: Screenshot_198.png
Просмотров: 309
Размер:	68.4 КБ
ID:	1760596Нажмите на изображение для увеличения
Название: Screenshot_200.png
Просмотров: 193
Размер:	19.4 КБ
ID:	1760607


  23. post_thanks Получено лайков: 4

    Viktor1987 (17.01.2018), Незарегистрированный (3 пользователя)

  24. Линк #13 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от АнтонР85 Посмотреть сообщение
    Привет Виктор! Да нужно так. Вложение 1760596Вложение 1760607
    Привет, Антон!
    Ещё раз:
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    То есть всё равно придется передать по ссылке переменную типа Т?
    И ещё вопрос, что такое:
    Код:
    return 0.0123f;
    опять что-то с битами / байтами? Надо срочно подтягивать мат. часть!


  25. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  26. Линк #14 Свернуть пост
    Свой человек
    АнтонР85 хорошая репутация АнтонР85 хорошая репутация АнтонР85 хорошая репутация Аватар для АнтонР85
    Регистрация:
    30.06.2016
    Пол:
    Мужчина
    Сообщений:
    622
    Деньги за посты (Подробнее):
    18083 RUB
    Поставил лайков:
    151
    Получено лайков:  272
    в 219 сообщениях
    44%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    Ещё раз:
    Нет это просто для примера что функция возвращает разные типы, то есть что бы узнать какой тип возвращаемого значения нужно вернуть(в вашем случае дату или индекс(так как всего два варианта, то конечно надо использовать bool)).
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    И ещё вопрос, что такое:
    Функция возвращает значение типа float(так как у него стоит префикс "f", для литерала с запятой по умолчанию тип double), в последнем вызове функций я передаю тип double, а в операторах для этого типа нет условия, поэтому возвращается значение по умолчанию.


  27. post_thanks Получено лайков: 2

    Viktor1987 (17.01.2018), Незарегистрированный (1 пользователь)

  28. Линк #15 Свернуть пост
    Кандидат форумных наук
    Все пучком
     
    Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Viktor1987 хорошая репутация Аватар для Viktor1987
    Регистрация:
    12.10.2013
    Пол:
    Мужчина
    Сообщений:
    1,897
    Деньги за посты (Подробнее):
    29274 RUB
    Поставил лайков:
    755
    Получено лайков:  651
    в 459 сообщениях
    34%
    Цитата Сообщение от АнтонР85 Посмотреть сообщение
    Нет это просто для примера
    Так вот как раз это мне и не понятно! В моём примере, при передаче параметра по ссылке, теряется весь смысл от return, он по сути и не нужен! А вот как реализовать возврат шаблонного типа без передачи параметра по ссылке, тут я уже не разумел! Продолжу читать и смотреть примеры по ссылке Игоря!


  29. post_thanks Получено лайков: 2

    АнтонР85 (17.01.2018), Незарегистрированный (1 пользователь)

  30. Линк #16 Свернуть пост
    Свой человек
    АнтонР85 хорошая репутация АнтонР85 хорошая репутация АнтонР85 хорошая репутация Аватар для АнтонР85
    Регистрация:
    30.06.2016
    Пол:
    Мужчина
    Сообщений:
    622
    Деньги за посты (Подробнее):
    18083 RUB
    Поставил лайков:
    151
    Получено лайков:  272
    в 219 сообщениях
    44%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    Так вот как раз это мне и не понятно! В моём примере, при передаче параметра по ссылке, теряется весь смысл от return, он по сути и не нужен! А вот как реализовать возврат шаблонного типа без передачи параметра по ссылке, тут я уже не разумел! Продолжу читать и смотреть примеры по ссылке Игоря!
    Да странно, и удивительно но это так. В документаций все примеры с передачей параметра через ссылку в функцию, поэтому это скорей всего единственный путь. Но все равно просвещайтесь это не плохо.


  31. post_thanks Получено лайков: 4

    Viktor1987 (17.01.2018), Незарегистрированный (3 пользователя)

  32. Линк #17 Свернуть пост
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    6,975
    Деньги за посты (Подробнее):
    155746 RUB
    Поставил(а) лайков:
    906
    Получено лайков:  7,116
    в 3,382 сообщениях
    102%
    Цитата Сообщение от Viktor1987 Посмотреть сообщение
    Так вот как раз это мне и не понятно! В моём примере, при передаче параметра по ссылке, теряется весь смысл от return, он по сути и не нужен! А вот как реализовать возврат шаблонного типа без передачи параметра по ссылке, тут я уже не разумел!
    Вот потому и не уразумел, что ты пытаешься прикрутить шаблон там, где его использование не имеет смысла. Суть шаблона в том, что это всего лишь образец(заготовка) кода, на основе которой компилятор может нагенерить кучу перегруженных функций, одинаковых по сути, но различных по используемым типам и их кол-во будет зависеть от того, сколько вариантов вызова шаблонной функции окажется в твоем коде по факту. Это как форма для литья металла в металлургии. При помощи одной формы ты можешь изготовить детали из разных металлов.

    Простой пример, сложить несколько чисел. Ежу понятно, что складывать можно числа разных типов, следовательно и результат тоже будет разного типа. Что ты можешь сделать в этом случае...
    1. Написать самому кучу перегруженных функций, на все случаи жизни.
    2. Написать один шаблон.
    В первом случае - это муторное занятие, т.к. чем больше вариантов на входе, тем больше функций тебе надо набивать ручками.
    Во втором случае - ты делаешь один шаблон, а компилятор на его основе сам генерит нужное кол-во самостоятельных функций(но не в исходном листинге, а в результирующем коде), предназначенных для работы с конкретным набором типов. При этом типы внутри шаблона будут зависеть только от внешних условий вызова шаблонной функции в основном коде, а совсем не от того, что программисту взбредет в голову выплюнуть наружу, в зависимости от расчетов или от значения какого нибудь там одного параметра.

    ЗЫ: Gold, походу мы тут слегка загадили человеку темку и ушли в отдельное другое русло... Будь добр, перенеси плиз все что касается шаблонов в отдельную темку, например "Шаблоны кода в MQL".

    Последний раз редактировалось ir0407; 17.01.2018 в 11:43.

  33. post_thanks Получено лайков: 4

    Leschich (03.03.2018), Viktor1987 (17.01.2018), АнтонР85 (17.01.2018), Незарегистрированный (1 пользователь)

  34. Линк #18 Свернуть пост
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    6,975
    Деньги за посты (Подробнее):
    155746 RUB
    Поставил(а) лайков:
    906
    Получено лайков:  7,116
    в 3,382 сообщениях
    102%
    Gold, спасибо, вот только название "Viktor1987 учится кодить ООП" слегка не соответствует содержимому. Шаблоны это как бы не совсем ООП. Или вернее совсем не ООП. Хотя их и можно применять к классам.