Era possibile prima?
Sì. L'ho controllato specialmente sulla vecchia build (1554) - tutto funziona.
Lo controllerò stasera con tale annuncio in C++.
Si prega di dare un esempio dell'uso di questa costruzione.
Per favore, fate un esempio di come usare questo costrutto.
L'esempio più banale è una classe array, che in questo caso viene utilizzata per memorizzare qualsiasi puntatore:
template<typename T> class CArray { T _data[]; public: T operator[](int i) const { return _data[i]; } int Size() const { return ArraySize(_data); } // и т.д. }; СArray<void*> pointers;
L'esempio più banale è la classe array, che in questo caso viene utilizzata per memorizzare qualsiasi puntatore.
Come usarlo allora?
class A { public: void OnInit() { Print(__FUNCSIG__); } }; class B { public: void OnInit() { Print(__FUNCSIG__); } }; void OnStart() { void* Pointers[2]; A a; B b; Pointers[0] = &a; Pointers[1] = &b; for (int i = 0; i < ArraySize(Pointers); i++) Pointers[i].OnInit(); // 'OnInit' - member function not defined }
Cast al tipo che ci avete messo originariamente (o controllare tramite dynamic_cast).
// (A*)Pointers[i].OnInit(); ((A*)Pointers[i]).OnInit();
Questo è solo sul tema se le parentesi sono necessarie/non necessarie... Con questo casting sarebbe una scocciatura nello script di cui sopra quando viene eseguito. Cioè dovete conoscere i nomi delle classi a cui si riferiscono gli elementi del puntatore dell'array.
Non vedo quale sia la convenienza allora.
MQ usa void* solo in un posto.
typedef string(*DoubleToStringFunction)(double,void*);
MQ usa void* solo in un posto.
Poiché hanno tutto costruito su CObject, rende impossibile utilizzare i loro contenitori per le proprie classi e interfacce, non ereditate dalla loro classe. Cioè non è una soluzione universale.
Questo è probabilmente dovuto al fatto che al momento della creazione della loro libreria non c'era ancora void* in MQL. Ma d'altra parte il loro oggetto stesso partecipa anche ad alcune manipolazioni (cambiando i valori dei puntatori in esso), che di per sé è semplicemente selvaggio.
Questo rende impossibile utilizzare i loro contenitori per le proprie classi e interfacce non ereditate dalla loro classe, cioè non è una soluzione universale.
Forse perché al momento della creazione della loro libreria, non c'era ancora void* in MQL.
Purtroppo non ho visto un esempio del suo utilizzo.
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Errore del compilatore. Bild 1961, 64 bit.