Tengo estas dos funciones:

void CheckOneConditionInt( int    &SettingsEditValueInt );
void CheckOneConditionDbl( double &SettingsEditValueDbl );

Hacen lo mismo, pero uno se usa con valores int y otro se usa con valores double . ¿Hay alguna manera de convertirla en una función que pueda tomar int / double como argumento? Por ejemplo:

void CheckOneCondition( void &SettingsEditValue );

PD: El ejemplo no funciona, por supuesto.

1
Enivid 25 dic. 2016 a las 23:24

3 respuestas

La mejor respuesta

El problema se resuelve usando plantillas:

template<typename T>
void CheckOneCondition( T &SettingsEditValue );

Entonces puedo llamarlo pasando el parámetro double o int.

0
Enivid 28 dic. 2016 a las 21:48

Si y no.

Mientras que las extensiones Nuevo - MQL4.56789 han introducido clases (dentro de las cuales hay medios para múltiples interfaces de llamada (donde una podría ser adecuada para {{X1) }} y otro para int ), que podría significar ),
el MQL4 es, en sus principios de diseño iniciales, un lenguaje compilado con tipeo fuerte,
que significa NO .


Reglas de decisión de diseño

Un diseño sólido y claro puede responder al dilema. No hay una razón principal para tener una interfaz de llamada ambigua y de doble tipo en el dominio del problema MQL4.

Excepto por alguna experimentación teórica, siempre hay una certeza determinista, de qué tipo es el valor que se pasará a una función, por lo tanto, una interfaz de llamada amorfa de tipo dual (multi) es más un tema académico en el contexto de uso de MQL4.


Epílogo

Si uno realmente busca un geek tan extremadamente artificial para lograr un agnosticismo no determinista, definamos primero un caso de uso claro del dominio MQL4, para el cual tal incertidumbre del tipo de parámetro es necesaria e inevitable por otros medios disponibles. .

0
user3666197 26 dic. 2016 a las 10:34

¿Has oído hablar de la sobrecarga de métodos? Se usa en MQL4.5. Entonces, si pasa el valor int, se llama a Function( int value ), si es real, se llama a Function( double value ). Si el algoritmo aplicado a ambos tipos es el mismo, tal vez pueda omitir Function( int value ) o agregar un contenedor dentro de la función entera, algo como:

Function( int &value ){
   double tmp = value/1.0;       
   Function( tmp );
   value = ( int ) Normalize( tmp, 0 );
}
0
user3666197 26 dic. 2016 a las 10:14