Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 936

 
Igor Makanu:

de nuevo: el hecho de que no haya obtenido un error de compilación no significa que su clase de plantilla haya sido incluida - ¿dónde está el objeto de clase CData? - Veo una declaración de plantilla, pero ¿dónde está dicha variable? - ¿Objeto?

si usted "necesita vitalmente" para resolver la cuestión, a continuación, hacer el código totalmente reproducible - completamente es sin ..... comentarios a su discreción y, de nuevo, no entiendo la lógica de utilizar la sustitución de macro

tal vez ese es el "punto", rara vez uso macros, al menos si uso una macro entiendo lo que eventualmente resulta, en tu ejemplo es un misterio para mí

Sí, tienes razón, el objeto no se ha creado, así que he comprobado

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

No veo para qué necesito un lenguaje de programación así y para qué voy a necesitar esas clases si ni siquiera puedo sobrecargarlas, todo está muerto y estático.

 
¿Cómo escribo una carta a los desarrolladores de mql4 cómo ver el código del compilador, puedo añadir más características para que no sea tan estático?
 
Seric29:

Sí, tienes razón, el objeto no se ha creado, así lo he comprobado

Como resultado, la sobrecarga no es posible, lo cual es un punto negativo, así que ¿por qué necesitaría un lenguaje de programación así y por qué necesitaría esas clases si ni siquiera puedo sobrecargar todo está muerto y estático?

¿De verdad?

No lo sabías.

¿Cómo se escriben entonces las cosas complicadas? Está más allá de la comprensión...

 
Seric29:

La tarea de la macro es llamar a la función de la clase y pasar el valor a esta función, y como la macro puede tomar un array de cualquier dimensión, estoy tratando de hacer un esquema de este tipo. Por supuesto un montón de piedras, pero necesito llamar a la función de la clase y no sé cómo llamar a una función simple de la clase (en mi caso, el método Total no tiene descripción) no está escrito en la ayuda, hay ejemplos complejos relacionados con la transferencia.

Aquí hay un ejemplo una macro toma una matriz de cualquier dimensión, es malo que los desarrolladores han cortado estas características normales de trabajo con elementos complejos

Se puede hacer sin plantilla, pero es mejor con una plantilla.

No quise, pero abrí la terminal, aquí está tu ejemplo:

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

He comentado la sustitución de macros, el código compila, por lo que no funciona... He preguntado tres veces por qué una plantilla que no se utiliza y por qué una sustitución de macros que sólo duplica una palabra clave del lenguaje

No sólo no entiendo lo que se necesita, sino que no entiendo qué hacer con el código que no compila parte de él.

HH: Si usted está tratando de hacer una matriz multidimensional utilizando esta plantilla o una macro - imho, no va a funcionar, encontrar una solución ya hecha por la búsqueda a través del foro y el uso de

ZS: Definitivamente me rindo, no es una pregunta para mí.

 
Seric29:
¿Cómo escribo una carta a los desarrolladores de mql4 cómo ver el código del compilador, puedo añadir más características para que no sea tan estático?

No en el caso de ponerse los pantalones en la cabeza :)

 
Artyom Trishkin:

¿De verdad?

No lo sabías.

¿Cómo se escriben entonces las cosas complejas? Está más allá de la comprensión...

Bueno, qué complicado puede escribir aquí si se niega el acceso a la memoria para trabajar con funciones dinámicas, incluso la sobrecarga no es posible, por lo que tiene que escribir un extra de 1000 líneas de código para completar su programa, iniciar bucles y variables adicionales, por lo tanto el rendimiento del programa es 0.

 
Seric29:

Pues bien, qué difícil es escribir si el acceso a la memoria está denegado, no puedes trabajar con funciones dinámicas, incluso la sobrecarga es imposible, por lo que tienes que escribir 1000 líneas de código extra para terminar tu programa, iniciar bucles y variables extra, de ahí que el rendimiento del programa sea 0.

Bueno, si la estructura del programa está inicialmente muerta, sí, no hay manera.

El programa se escribe al final. En primer lugar, un enfoque reflexivo de la estructura del programa.

Sinceramente, no entiendo por qué llevas meses peleándote con algo que se hace de otra manera, y en cinco minutos. Realmente no entiendo...

 
Igor Makanu:

No quise, pero abrí mi terminal, aquí está su ejemplo:

Comenté la macro sustitución, el código compila, entonces no funciona... Pregunté tres veces por qué un patrón que no se usa y por qué una macro sustitución que sólo duplica una palabra clave del lenguaje

No sólo no entiendo lo que se necesita, sino que no entiendo qué hacer con el código que no compila parte de él.

HH: Si usted está tratando de hacer una matriz multidimensional utilizando esta plantilla o una macro - imho, no va a funcionar, encontrar una solución ya hecha por la búsqueda a través del foro y el uso de

ZS: Definitivamente me rindo, no es una pregunta para mí.

Aquí di un ejemplo de que la macroVosmas acepta cualquier array. La única solución para los arrays es usar arrays de la misma dimensión, no hablo de todo tipo de punteros y referencias y funciones dinámicas que funcionan en c++, y también es un problema sacar una función en c++, especificar el tipo y otras cosas, un lenguaje demasiado estático y todo, no se puede escribir lo realmente genial aquí.

 
Seric29:

Aquí di un ejemplo de que la macroVosmas acepta cualquier array. La única solución para los arrays es usar arrays de la misma dimensión, no estoy hablando de todo tipo de punteros y referencias y funciones dinámicas que funcionan en C++, y también el problema de derivar una función en C++ especificar el tipo y otras tonterías en definitiva un lenguaje demasiado estático y todo, no se pueden escribir cosas realmente chulas aquí.

Empieza a leer los fundamentos de C++, ¡MQL tiene diferencias mínimas!

ZS: enhorabuena, has escrito una macro universal que puede hacer de todo, las matrices son lo más fácil que puede "manejar", ejemplo a reproducir:

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

empezar a leer los fundamentos de C++, ¡MQL tiene diferencias mínimas!

ZS: enhorabuena, has escrito una macro universal que puede hacer de todo, las matrices son lo más fácil que puede "manejar", ejemplo a seguir:

Pues bien, quise meterle mano a esto pasando un array a una macro y en la macro llamar a una función sobrecargable y devolver el resultado, parece una tarea primitiva pero cuando llamas a una función sobrecargable en una macro te lanza un aviso de que las funciones 3 resulta que en la macro hay que escribir un criterio que determine a cuál de las funciones sobrecargables llamar y aquí de nuevo hay que preguntarse cómo hacer esta comprobación, en general la idea falla.

Razón de la queja: