Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 936

 
Igor Makanu:

novamente: só porque você não recebeu um erro de compilação não significa que sua classe template foi incluída - onde está o objeto da classe CData ? - Vejo um modelo de declaração, mas onde se encontra tal variável? - objeto ?

se você "precisa vitalmente" resolver a questão, então faça um código totalmente reprodutível - completamente sem ..... comentários a seu critério e novamente, não entendo a lógica de usar a substituição de macros

talvez esse seja o ponto, raramente uso macros, pelo menos se eu usar uma macro eu entendo no que ela eventualmente resulta, em seu exemplo é um mistério para mim

Sim, você está certo, o objeto não foi criado, então eu verifiquei

#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]);}

Não vejo porque preciso de tal linguagem de programação e porque precisaria de tais classes se não posso sequer sobrecarregá-las, tudo está morto e estático.

 
Como escrever uma carta para os desenvolvedores do mql4 como ver o código do compilador, posso adicionar mais recursos para que não seja tão estático?
 
Seric29:

Sim, você está certo, o objeto não foi criado, foi assim que eu verifiquei

Como resultado, a sobrecarga não é possível, o que é um menos, então por que eu precisaria de tal linguagem de programação e por que eu precisaria de tais classes se eu não posso nem mesmo sobrecarregar tudo está morto e estático?

Sério?

Você não sabia disso.

Como as pessoas escrevem coisas complicadas então? Está além da compreensão...

 
Seric29:

A tarefa da macro é chamar a função da classe e passar o valor para esta função, e como a macro pode tomar uma matriz de qualquer dimensão, estou tentando fazer um esquema desse tipo. Claro que muitas pedras, mas preciso chamar a função da classe e não sei como chamar uma função simples da classe (no meu caso, o método Total não tem descrição) não está escrito no Help, há exemplos complexos relacionados à transferência.

Aqui está um exemplo de uma macro que toma uma variedade de qualquer dimensão, é ruim que os desenvolvedores tenham cortado essas características trabalho normal com elementos complexos

Você pode fazer isso sem um modelo, mas é melhor com um modelo.

Eu não queria, mas abri o terminal, aqui está o seu exemplo:

#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
  }
//+------------------------------------------------------------------+

Comentei a substituição de macros, o código compila, então não funciona? perguntei três vezes por que um modelo que não é usado e por que uma substituição de macros que apenas duplica uma palavra-chave do idioma

Não apenas não entendo o que é necessário, mas não entendo o que fazer com códigos que não compilam parte deles.

HH: Se você está tentando fazer uma matriz multidimensional usando este modelo ou uma macro - imho, não vai funcionar, encontre uma solução pronta através da busca no fórum e use

ZS: Eu definitivamente desisto, não é uma pergunta para mim.

 
Seric29:
Como escrever uma carta para os desenvolvedores do mql4 como ver o código do compilador, posso adicionar mais recursos para que não seja tão estático?

Não no caso de colocar calças sobre sua cabeça :)

 
Artyom Trishkin:

Sério?

Você não sabia disso.

Como as pessoas escrevem coisas complexas então? Está além da compreensão...

Bem, quão complicado você pode escrever aqui se o acesso à memória for negado para trabalhar com funções dinâmicas, mesmo a sobrecarga não é possível, então você tem que escrever mais 1000 linhas de código para completar seu programa, iniciar loops e variáveis extras, portanto a performance do programa é 0.

 
Seric29:

Bem, o que é tão difícil de escrever se o acesso à memória for negado, você não pode trabalhar com funções dinâmicas, mesmo a sobrecarga é impossível, então você tem que escrever mais 1000 linhas de código para terminar seu programa, iniciar loops e variáveis extras, então o desempenho do programa é 0.

Bem, se a estrutura do programa estiver inicialmente morta, sim, não há como.

O programa está escrito bem no final. Primeiro, uma abordagem cuidadosa da estrutura do programa.

Sinceramente, não entendo porque você está lutando há meses com algo que é feito de maneira diferente, e em cinco minutos. Eu realmente não entendo...

 
Igor Makanu:

Eu não queria, mas abri meu terminal, aqui está o seu exemplo:

Comentei a macro substituição, o código compila, então não funciona... Perguntei três vezes por que um padrão que não é usado e por que uma macro substituição que apenas duplica uma palavra-chave do idioma

Não apenas não entendo o que é necessário, mas não entendo o que fazer com códigos que não compilam parte deles.

HH: Se você está tentando fazer uma matriz multidimensional usando este modelo ou uma macro - imho, não vai funcionar, encontre uma solução pronta através da busca no fórum e use

ZS: Eu definitivamente desisto, não é uma pergunta para mim.

Aqui dei um exemplo de que o macroVosmas aceita quaisquer matrizes. A única solução para matrizes é usar matrizes da mesma dimensão, não estou falando de todos os tipos de ponteiros e referências e funções dinâmicas que funcionam em C++, e até mesmo o problema de produzir uma função em C++, especificar o tipo e outras coisas é uma linguagem muito estática, não é possível escrever as coisas realmente legais aqui.

 
Seric29:

Aqui dei um exemplo de que o macroVosmas aceita quaisquer matrizes. A única solução para matrizes é usar matrizes da mesma dimensão, não estou falando de todo tipo de ponteiros e referências e funções dinâmicas que funcionam em C++, e também o problema de derivar uma função em C++ especificar tipo e outros disparates em linguagem muito estática e tudo mais, não se pode escrever coisas muito legais aqui.

Comece a ler o básico de C++, MQL tem diferenças mínimas!

ZS: parabéns, você escreveu uma macro universal que pode fazer tudo, arrays são a coisa mais fácil de "lidar", exemplo para reproduzir:

#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:

comece a ler o básico de C++, MQL tem diferenças mínimas!

ZS: parabéns, você escreveu uma macro universal que pode fazer tudo, arrays são a coisa mais fácil de "lidar", exemplo a seguir:

Bem, eu queria controlar isso passando uma matriz para uma macro e na macro chamar uma função sobrecarregável e retornar o resultado, parece uma tarefa primitiva mas quando você chama uma função sobrecarregável em uma macro, ela lança um aviso de que a função 3 se revela que na macro você precisa escrever um critério que determinará qual das funções sobrecarregáveis chamar e aqui novamente você tem que perguntar como fazer esta verificação, em geral a idéia falha.

Razão: