OOP, plantillas y macros en mql5, sutilezas y usos - página 25

 

fxsaber:

Probablemente, algunos compiladores dan advertencias en tales situaciones.

El especificador se refiere a una referencia, no al objeto en su conjunto, todo es legítimo, ¿por qué debería jurar el compilador?

 
TheXpert:

el especificador se refiere a la referencia, no al objeto en su conjunto, todo es legítimo, ¿por qué debería jurar el compilador?

Probablemente, si lo fuera, no habría ninguna regañina aquí.

void g1( A& ) {}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a); // 'a' - constant variable cannot be passed as reference
  g2(a); // OK
}
 
fxsaber:

Probablemente, si ese fuera el caso, no habría insultos aquí.

Se trata de un objeto constante, por lo que es lógico que un objeto constante no pueda tener una referencia no constante

 
TheXpert:

Se trata de un objeto constante, por lo que es lógico que un objeto no constante no pueda tener una referencia no constante.

¿Cómo puedo referirme a un objeto constante?

 
fxsaber:

¿Cómo hago una referencia a un objeto constante?

void g1( A& ) {}
void g1(const A& ){}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a);
  g2(a);
}

Añade una sobrecarga.

 
Vladimir Simakov:

Sobrecarga para añadir.

¿No es una sobrecarga en un enlace constante?

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

OOP, plantillas y macros en mql5, consejos y trucos

TheXpert, 2020.02.26 15:24

El especificador se refiere a la referencia y no al objeto en su conjunto

 
fxsaber:

¿No es esa sobrecarga una referencia constante?

¿Qué quieres hacer?

 
fxsaber:

¿No es esa sobrecarga una sobrecarga en una referencia constante?

Si quieres que el compilador se bloquee en tu primer ejemplo, no funcionará, porque todo es legal allí: no cambias la instancia del objeto por referencia, cambias la instancia del objeto para el que se llama al método, mientras que el hecho de que pueda ser el mismo objeto no es problema del compilador, sino el dolor de cabeza del programador.

Para una clase, puedes hacer este truco (para la estructura, no):

class A
{
  int i;
public:
  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    if (&this!=&Value) this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}
 
Vladimir Simakov:

Si quieres que el compilador se bloquee en tu primer ejemplo, no lo hará, porque todo es legal allí.

No se trata de la legalidad, sino de que el modificador const no garantiza que el objeto permanezca inalterado.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

OOP, plantillas y macros en mql5, consejos y trucos

fxsaber, 2020.02.25 22:23

Nunca he visto que esta expresión devuelva falso.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

Por eso es difícil llevar estadísticas sobre el tiempo de ejecución de las órdenes basadas en el historial de operaciones.

Si todavía podemos comparar el valor deORDER_TIME_SETUP_MSC para las órdenes de mercado, no tiene sentido para las órdenes pendientes.


Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bibliotecas: MT4Orders

fxsaber, 2020.02.27 09:40

0 - 348806: 00:01:57.311
1 - 348530: 00:01:39.027
2 - 348494: 00:01:15.259
3 - 348406: 00:01:07.671
4 - 348950: 00:01:04.869
5 - 348960: 00:01:02.888
6 - 348814: 00:01:00.654
7 - 348392: 00:01:00.642
8 - 348508: 00:00:54.515
9 - 348550: 00:00:54.467


Hasta dos minutos de ejecución en una cuenta corriente. Comparte tus estadísticas aquí. El script no utiliza ninguna librería, es apto para Netting/Hedging.