
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
1. il nuovo operatore restituisce un puntatore, naturalmente, gli sviluppatori hanno fatto un casino con la dereferenziazione implicita, quindi la tua versione funziona, ma è meglio non rimanere bloccati su cose non documentate.
2. Certo, non abbiamo C++, ma è molto simile, quindi le liste di inizializzazione (non so per l'efficienza) sono kosher.
Controllato, sì, la tua opzione funziona, e logicamente è più corretta:
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_1::Strategy_1
2019.08.31 22:07:35.196 tst (EURUSD,H1) Context::Context
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_2::Strategy_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) Strategy_2::Algorithm
2019.08.31 22:07:35.197 tst (EURUSD,H1) Strategy_1::Algorithm
Il puntatore e l'oggetto creato all'inizializzazione non sono stati persi, e il metodo nell'interfaccia non ha sostituito i metodi delle classi 1 e 2 - tutto sembra funzionare come previsto
Come posso evitare sezioni di codice ripetitive durante l'inizializzazione? - nel costruttore non si può
Come posso evitare sezioni di codice ripetitive durante l'inizializzazione? - nel costruttore, non è possibile
Invece dell'interfaccia, fate una classe normale. Lì metti *m e rendi il metodo bool SomeMethod {if (CheckPointer(m)) return false; m=new...; return true;}
No, ho bisogno delle interfacce - è molto bello che non avrò bisogno di tirare tutto ad ogni tick - farò una chiamata di una strategia per un tick - in generale mi piace la configurazione di tutto questo finora, sembra che sia stato necessario per risolvere il mio problema in questo modo:
Ho modificato un po' il mio esempio - funziona, ma dovrebbe apparire così:
ma se rimuovo il corpo del metodoCStrategy::Algorithm(void), ci sarà un errore: 'Algorithm' -la funzione deve avere un corpo
Perché è un errore? - perché dichiaro il metodo CStrategy::Algorithm(void) con il modificatore virtual
Ho modificato un po' il mio esempio - funziona, ma dovrebbe apparire così:
ma se rimuovo il corpo del metodo CStrategy::Algorithm(void), ci sarà un errore: 'Algorithm' - la funzione deve avere un corpo
Perché è un errore? - perché dichiaro il metodo CStrategy::Algorithm(void) con il modificatore virtual
virtual void Algoritm()=0;
No, neanche questo funzionerà. Se dichiarate un'astrazione, siate abbastanza gentili da implementarla.
Penso che il compilatore percepisca il metodo Algoritmo() dall'interfaccia e il vuoto virtuale dichiarato Algoritmo() come metodi diversi a causa del modificatore virtuale
Un metodo astratto deve essere implementato nei discendenti. Ancora una volta, non c'è bisogno di implementarlo.
Ho bisogno di interfacce perché è conveniente per me dichiarare un comportamento diverso per 6 strategie a seconda delle impostazioni di Expert Advisor (non ci sono molte strategie ma sistemi di ordini)
in questo momento:
Voglio minimizzare il corpo dei metodi Algorithm() - se scrivo correttamente la classe base - nel mio esempio, la classe CStrategy, allora la stessa Algorithm() conterrà 5-10 linee al massimo
Come dovrei scrivere questo codice senza un'interfaccia? - Ora tutto è breve e non rimarrà che tirare gli algoritmi stessi strategie ogni tick o meno frequentemente
как этот код без интерфейса написать? - сейчас все кратко и останется только дергать сами алгоритмы стратегий каждый тик или реже