OOP, modelos e macros em mql5, sutilezas e usos - página 19

 
Seric29:

Esta macro será nula, para retornar um resultado dela você precisa de uma expressão para ser calculada, em outras palavras, você precisa chamar uma função dentro dela, cheguei a esta conclusão.

Sim, tente compilar este código "mágico-miracle" primeiro. Alguns caras aqui estão fantasiando loucamente, desconectados da realidade.

 
Vict:

Eu não sei qual é a tarefa ou se você está cavando lá, mas à primeira vista é outra abordagem:

Assim, você pode substituir qualquer parte da função (não necessariamente o preenchimento da matriz como é no meu caso) e instanciá-lo conforme necessário.

É meio idiota. Você lança seu primeiro olhar para o código e pensa: bem, provavelmente a matriz será preenchida com aqueles números que são passados para a função, ou embaralhados para este valor... mas acontece que...

 
Dmitry Fedoseev:

É um pouco esquivado. Você olha para o código à primeira vista e pensa: bem, a matriz provavelmente será preenchida com aqueles números que são passados para a função, ou embaralhados para esse valor... mas acontece que...

Eu não estou impressionado, ok, estou p****.

 
Vict:

Você tem algum algoritmo dentro do qual você pode colocar um subalgoritmo, "afinar" por assim dizer, para resolver uma tarefa específica. Essencialmente, é um análogo de funções virtuais. O principal é você se perguntar, e agora você não sabe por que)), você tem uma estrutura, dentro da qual você coloca um laço.

Eu queria acrescentar código a esta estrutura e fazer com que toda a coisa retornasse um resultado, mas minha estrutura funciona como vazia e estou tentando descobrir isso. Preciso dele para trabalhar com matrizes de diferentes dimensões.

 
Vict:

Chamar uma função na qual você passa um ponteiro para outra função (corpo de laço, por exemplo)

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;
}


O mql4 não funciona com apontadores para uma função que nem mesmo os desenvolvedores fizeram isso.

Aqui está algo que eu encontrei

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
}
 
Então nem todo macro pode devolver um valor, quem sabe?
 
Seric29:
Então nem todo macro pode devolver um valor, quem sabe?

Não se pode devolver um valor de uma macro de forma alguma. Uma macro é uma substituição de uma peça de código por outra peça de código.

 
Dmitry Fedoseev:

Não se pode devolver um valor de uma macro de forma alguma. Uma macro é uma substituição de uma peça de código por outra peça de código.

Vejo, obrigado por sua resposta clara e correta.

 
Bem, não muito bem, a macro pode ser expandida para um operador ternário?: ou operador por vírgula (não em µl) do qual um valor pode ser devolvido.
 
Vict:
Bem não é bem verdade, macro pode ser expandido para operador ternário?: ou operador por vírgula (não em µl) a partir do qual você pode retornar valor.

Em C++ os operadores ternários são mais desenvolvidos, se a condição for verdadeira você pode realizar múltiplas ações e mql4 como antes do acesso próximo à memória e pelo menos por 10 anos os desenvolvedores não fizeram mudanças significativas e não criaram funções dignas de nota (existem apenas funções que funcionam com cores e texto e nada mais - apenas estupidez).