Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 936

 
Igor Makanu:

еще раз: то что Вы не получили ошибку компиляции, не значит, что Ваш шаблонный класс был включен - где объект класса CData ? - вижу объявление шаблона, а где такая переменная? - обьект?

если вопрос Вам "жизненно необходимо" решить, то сделайте полностью воспроизводимый код - полностью это без ..... комментарии на Ваше усмотрение и опять же, я не понимаю логику использования макроподстановки 

возможно в ней вся "соль", я редко пользуюсь макроподстановками, по крайней мере если я использую макрос, то я понимаю, что он в итоге даст, в Вашем примере для меня это загадка

Да вы правы объект не был создан вот я так проверил 

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#define templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д


#define Vosmas(a,b,c,d,e) /*return*/(Fun(a,b,c,d,e))//a- массив, 
                                                    //b- номер строки если нужен
                                                    //c,d- номера измерений если нужны и массив многомерный

int Mas[2],Mas2[2][2],Mas3[2][2][2];

int OnInit()
{int Perem=0;
 Perem=Vosmas(Mas,0,0,0,3);
 Print("Vosmas: ",Perem);//результат 3
return(INIT_SUCCEEDED);}

class CData{
public:CData(){};~CData(){};

       int Total(int &mas[]    ,int y1=0){return(mas[y1]);}  
       int Total(int &mas[][]  ,int y1=0/*,int y=0*/){return(mas[y1][0]);}
       int Total(int &mas[][][],int y1=0/*,int y=0,int u=0*/){return(mas[y1][0][0]);}};
       
         
templ(T) T Fun(T &a[],int b,int c,int d,int e){a[b]=e; return (a[b]);}

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

 
Как написать письмо разработчикам mql4 как увидеть код компилятора, можно ли в него внести дополнительные возможности чтобы он не был таким статическим?
 
Seric29:

Да вы правы объект не был создан вот я так проверил 

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

Правда?

Вот не знали.

Как тогда люди пишут сложные вещи? Уму нерастяжимо...

 
Seric29:

Задача макроса вызвать функцию из класса и передать значение в эту функцию а т.к. макрос может брать массив любой размеренности то я и пытаюсь составить такую схему. Конечно куча камней но мне нужно вызвать функцию из класса а я не знаю как вызвать простую функцию из класса(в моём случае у метода Total нет описания) об этом не написано в справке там описаны сложные примеры связанные с перепередачей.

Вот пример макрос берёт массив любой размеренности, плохо что разработчики урезали эти возможности нормальную работу со сложными элементами

Можно и без шаблона но лучше конечно с шаблоном.

не хотел, но открыл у себя терминал, вот Ваш пример:

#property strict
#property show_inputs
//+------------------------------------------------------------------+
//#define templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д

#define Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+

я закомментировал макроподстановку, код компилируется, значит она не работает? я три раза спросил зачем шаблон который не используется и зачем макроподстановка которая ключевое слово языка просто дублирует

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

ЗЫ: если Вы пытаетесь сделать многомерные массивы с помощью этого шаблона или макроподстановки - имхо,не получится, найдите готовое решение поиском по форуму и используйте

ЗЫ: однозначно сдаюсь, это вопрос не ко мне

 
Seric29:
Как написать письмо разработчикам mql4 как увидеть код компилятора, можно ли в него внести дополнительные возможности чтобы он не был таким статическим?

Никак в случае одевания штанов через голову :)

 
Artyom Trishkin:

Правда?

Вот не знали.

Как тогда люди пишут сложные вещи? Уму нерастяжимо...

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

 
Seric29:

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

Ну если структура программы изначально мёртвая, то - да, никак.

Программа пишется в самом конце. Сначала - вдумчивый подход к структуре программы.

Мне, честно, непонятно зачем вы воюете уже который месяц с тем, что делается иначе, и за пять минут. Вот правда не пойму...

 
Igor Makanu:

не хотел, но открыл у себя терминал, вот Ваш пример:

я закомментировал макроподстановку, код компилируется, значит она не работает? я три раза спросил зачем шаблон который не используется и зачем макроподстановка которая ключевое слово языка просто дублирует

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

ЗЫ: если Вы пытаетесь сделать многомерные массивы с помощью этого шаблона или макроподстановки - имхо,не получится, найдите готовое решение поиском по форуму и используйте

ЗЫ: однозначно сдаюсь, это вопрос не ко мне

Здесь я привёл пример того что макрос Vosmas принимает любые массивы. Единственное решение по массивам это использование массивов одинаковой размеренности, я молчу про всякие указатели и ссылки и динамические функции которые работают в с++, а ещё и проблема вывести функцию на с++ укажи тип и прочий бред короче слишком статический язык да и всё, писать реально крутые вещи здесь нельзя.

 
Seric29:

Здесь я привёл пример того что макрос Vosmas принимает любые массивы. Единственное решение по массивам это использование массивов одинаковой размеренности, я молчу про всякие указатели и ссылки и динамические функции которые работают в с++, а ещё и проблема вывести функцию на с++ укажи тип и прочий бред короче слишком статический язык да и всё, писать реально крутые вещи здесь нельзя.

начните читать основы С++, MQL имеет минимум отличий!

ЗЫ: поздравляю, Вы написали универсальный макрос, который может все, массивы это самое легкое что он может "обработать", пример для воспроизведения:

#property strict
#define Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
   
   class CA{public: int a;} A;
   class CB{public: int b;} B;
   class CC{public: int c;} C;
   class CD{public: int d;} D;
   class CE{public: int e;} E;
   Perem=Vosmas(A,B,C,D,E);     Print("Vosmas: ",Perem);//во всех случаях результат 5
   Perem=Vosmas("УРА","Я","УЧУ","MQL","4");     Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

начните читать основы С++, MQL имеет минимум отличий!

ЗЫ: поздравляю, Вы написали универсальный макрос, который может все, массивы это самое легкое что он может "обработать", пример для воспроизведения:

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

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