ООП, шаблоны и макросы в mql5, тонкости и приёмы использования - страница 19

 
Seric29:

Этот макрос будет void, для того чтобы вернуть из него результат нужно выражение которое будет рассчитано, другими словами нужно вызвать внутри него функцию, я пришёл к такому выводу.

Да сначала откомпилировать попробуйте этот "волшебно-чудесный" код. Тут некоторые ребята очень буйно фантазируют, оторвавшись от реальности.

 
Vict:

Не знаю что там за задача и туда ли копаете, но так навскидку - ещё один подход:

Так можете заменить любой кусок функции (необязательно заполнение массива как это у меня) и инстанцировать в нужном виде.

Понтовня какая-то. Кидаешь первый взгляд на код и думаешь:  ну наверно массив будет заполняться теми числами, которые переданы в функции, или масшатабироваться до этой величины... а оказывается то...

 
Dmitry Fedoseev:

Понтовня какая-то. Кидаешь первый взгляд на код и думаешь:  ну наверно массив будет заполняться теми числами, которые переданы в функции, или масшатабироваться до этой величины... а оказывается то...

Я не впечатлил, ну ладно, мне п****.

 
Vict:

У вас есть некоторый алгоритм, внутрь которого можно всунуть подалгоритм, так сказать "заточить" под решение частной задачи. По сути - аналог виртуальных функций. Главное сами просили, а теперь не знаете зачем )), у вас ведь был каркас, внутрь которого подсовывали loop.

Я хотел к этому каркасу дописать код и чтобы это всё дело возвращало результат а мой каркас работает как void и я пытаюсь с этим разобраться. Мне это нужно для работы с массивами разной размеренности.

 
Vict:

Вызывайте функцию, в которую передаёте указатель на другую функцию (тело цикла, например)

int for3(int a, int b, int c, void(*loop)()) {
        for(int i=0; i<a; i++)
                for(int j=0; j<b; j++)
                        for(int k=0; k<c; k++) 
                                loop();
        return 4;
}


mql4 не работает с указателями на функцию даже это разработчики не сделали.

Вот кое что нашёл

typedef int(*MyFuncType)(int,int);

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int operation (int x, int y, MyFuncType myfunc)
{
   int g;
   g = myfunc(x,y);
   return (g);
}

int OnInit()
{
   int m,n;
   m = operation (7, 5, addition);
   n = operation (20, m, subtraction);
   Print(n);
   return(INIT_FAILED);  //just to close the expert
}
 
Значит не из каждого макроса можно вернуть значение, кто знает?
 
Seric29:
Значит не из каждого макроса можно вернуть значение, кто знает?

Из макроса вообще нельзя вернуть значение. Макрос - это замена одного куска кода другим куском кода.

 
Dmitry Fedoseev:

Из макроса вообще нельзя вернуть значение. Макрос - это замена одного куска кода другим куском кода.

Понятно спасибо за чёткий корректный ответ.

 
Ну как бы не совсем верно, макрос можно развернуть в тернарный оператор ?: или оператор запятая (в мкл нет) из которых можно вернуть значение.
 
Vict:
Ну как бы не совсем верно, макрос можно развернуть в тернарный оператор ?: или оператор запятая (в мкл нет) из которых можно вернуть значение.

В с++ тернарные операторы более развиты, если условие истинно можно выполнить несколько действий а mql4 по прежнему как закрыли доступ к памяти так хоть ты и убей за 10 лет разработчики не внесли значимых изменений и не создали достойных внимания функций (есть только функции которые работа. с цветами и текстом и больше ничего нормально тупизм да и только).

Причина обращения: