Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
1. el operador new devuelve un puntero, por supuesto, los desarrolladores se hicieron un lío con la desreferenciación implícita, por lo que tu versión funciona, pero es mejor no quedarse con cosas indocumentadas.
2. Por supuesto, no tenemos C++, pero es muy parecido, así que las listas de inicialización (no sé si de eficiencia) son kosher.
Comprobado, sí que funciona tu opción, y lógicamente es más correcta:
2019.08.31 22:07:35.196 tst (EURUSD,H1) Estrategia_1::Estrategia_1
2019.08.31 22:07:35.196 tst (EURUSD,H1) Context::Context
2019.08.31 22:07:35.196 tst (EURUSD,H1) Estrategia_2::Estrategia_2
2019.08.31 22:07:35.196 tst (EURUSD,H1) Context::Context
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_1::Algorithm
2019.08.31 22:07:35.196 tst (EURUSD,H1) Estrategia_2::Algoritmo
2019.08.31 22:07:35.197 tst (EURUSD,H1) Strategy_1::Algorithm
El puntero y el objeto creado en la inicialización no se han perdido, y el método de la interfaz no ha sustituido a los métodos de las clases 1 y 2 - todo parece funcionar como estaba previsto
¿Cómo puedo evitar las secciones de código repetitivas durante la inicialización? - en el constructor no se puede
¿Cómo puedo evitar las secciones de código repetitivas durante la inicialización? - en el constructor, no se puede
En lugar de la interfaz, se hace una clase normal. Ahí pones *m y haces el método bool SomeMethod {if (CheckPointer(m)) return false; m=new...; return true;}
No, necesito las interfases - es muy bueno que no necesitaré tirar de todo en cada tick - haré una llamada de una estrategia por un tick - en general me gusta la configuración de todo esto hasta ahora, parece que era necesario para resolver mi problema de esta manera:
He retocado un poco mi ejemplo - funciona, pero debería tener este aspecto:
pero si elimino el cuerpo del métodoCStrategy::Algorithm(void), habrá un error: 'Algorithm' -la función debe tener un cuerpo
¿Por qué es un error? - porque declaro el método CStrategy::Algorithm(void) con el modificador virtual
He ajustado un poco mi ejemplo - funciona, pero debería tener este aspecto:
pero si elimino el cuerpo del método CStrategy::Algorithm(void), habrá un error: 'Algorithm' - la función debe tener un cuerpo
¿Por qué es un error? - porque declaro el método CStrategy::Algorithm(void) con el modificador virtual
virtual void Algoritm()=0;
No, eso tampoco funcionará. Si declaras una abstracción, ten la amabilidad de implementarla.
Creo que el compilador percibe el método Algorithm() de la interfaz y el void virtual declarado Algorithm() como métodos diferentes debido al modificador virtual
Un método abstracto debe ser implementado en los descendientes. Una vez más, no es necesario aplicarlo.
Necesito interfaces porque me conviene declarar un comportamiento diferente para 6 estrategias dependiendo de la configuración del Asesor Experto (no hay tantas estrategias sino sistemas de órdenes)
ahora mismo:
Quiero minimizar el cuerpo de los métodos de Algorithm() - si escribo la clase base correctamente - en mi ejemplo, la clase CStrategy, entonces el propio Algorithm() contendrá 5-10 líneas como máximo
¿Cómo debo escribir este código sin una interfaz? - Ahora todo es breve y sólo quedará tirar de los propios algoritmos como estrategias cada tick o con menos frecuencia
как этот код без интерфейса написать? - сейчас все кратко и останется только дергать сами алгоритмы стратегий каждый тик или реже