Caractéristiques du langage mql5, subtilités et techniques - page 188
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
La question est de savoir comment vous pouvez lancer une méthode de classe non statique par un pointeur même si l'objet de l'autre classe (dans ce cas CTimer) est une propriété (variable) de la classe.
no.... Bien sûr, vous pouvez passer un pointeur à un autre objet et changer le pointeur là pour appeler la méthode.... mais vous devez connaître le nom de la méthode.
ZS : mais j'ai écrit hier, utiliser un exemple@fxsaber et hériter, dans chaque classe sera appelé par OnTimer , il y aura seulement une classe de base dans la boucle pour vérifier quel timer a quel intervalle de temps, et le lancement du timer principal dans la méthode statique mettre en œuvre
La question est de savoir comment vous pouvez utiliser un pointeur pour exécuter une méthode non statique d'une classe même si l'objet d'une autre classe (dans ce cas CTimer) est une propriété (variable) de cette classe. Est-ce possible ? J'ai bien peur que non.
- modèles
- les interfaces
des modèles :
Pas d'implémentation du timer lui-même ici, juste un exemple de comment appeler une fonction non-statique (écrit directement dans le forum, n'a pas vérifié)
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
MT5 et la vitesse en action
fxsaber, 2020.10.04 11:56
Détermine si un programme est en cours d'exécution sur une machine freinée ou non.
La question est de savoir comment exécuter une méthode de classe non statique par pointeur même si l'objet d'une autre classe (dans ce cas CTimer) est une propriété (variable) de cette classe. Et est-ce possible ? J'ai bien peur que non.
En termes généraux, cela ressemble à ceci :
Vous pouvez télécharger la librairie à partir d'ici : https://github.com/sva04091979/STD/tree/TimerEvent. Branche TimerEvent, pas encore fusionnée dans le master.
no.... Bien sûr, vous pouvez passer un pointeur à un autre objet et changer le pointeur là pour appeler la méthode.... mais vous devez connaître le nom de la méthode.
ZS : mais j'ai écrit hier, utiliser un exemple@fxsaber et hériter, dans chaque classe sera appelé par OnTimer , il y aura seulement une classe de base dans la boucle pour vérifier quel timer a quel intervalle de temps, et le lancement du timer principal dans la méthode statique mettre en œuvre
Igor, je ne comprends pas de quel code fxsaber on parle.
des modèles :
Il n'y a pas d'implémentation du timer lui-même, seulement un exemple de comment appeler une fonction non-statique (écrit directement sur le forum, je n'ai pas vérifié).
Merci. Je l'ai essayé. Rien ne sort.
En général, ça ressemble à ça :
Vous pouvez télécharger la bibliothèque à partir d'ici : https://github.com/sva04091979/STD/tree/TimerEvent. La branche TimerEvent, je ne l'ai pas encore fusionnée dans le master.
Merci. Mais je n'ai pas non plus trouvé comment exécuter une méthode de classe non statique par le pointeur.
Il semble qu'il n'y ait pas de solution à ce problème dans l'état actuel du langage MQL5.Merci à vous tous, mais peut-être n'ai-je pas formulé la tâche correctement ou n'ai-je pas trouvé de solution dans votre article en raison de mes connaissances limitées.
De quoi avez-vous besoin ?
Voici un exemple d'indicateur.
La méthode Timer4(marquée en bleu) de la classe CTestTimer est lancée par le pointeur de la classe CTimer(dans la boucle de la méthode CTimer:: OnTimer) passé à la classe CTimer::NewTimer au moment de l'exécution du constructeur lorsque l'objet de la classe CTestTimer est créé.
J'ai tout essayé. Il y a une impasse. Il est impossible d'obtenir un pointeur sur cette méthode. En C++, cela fonctionne de la manière suivante : typedef void (CTestTimer::*TFun)() ;
Et il y a une erreur étrange : 'Timer4' - pointer vers ce type de fonction n'est pas encore supporté ('Timer4' - pointer vers ce type de fonction n'est pas encore supporté)
"Pour l'instant" - comme si MQ avait mis cette question de côté en attendant des temps meilleurs.
Igor, je ne comprends pas de quel code fxsaber il s'agit.
https://www.mql5.com/ru/forum/325418/page4#comment_16116740
la valeur de ce code est.... vous pouvez créer votre propre objet dynamique n'importe où dans le code -.... et ne prenez pas la peine de le mettre à jour, et il sera cloué tout seul lorsque vous quitterez le programme
le nombre de ces minuteurs n'est limité que par votre imagination... Je voulais déplacer un sprite - j'ai créé un objet qui a rampé du bord gauche de l'écran vers la droite et s'est tué - pour ainsi dire, une autonomie complète.
...trop paresseux pour écrire un exemple, tâche peu intéressante
https://www.mql5.com/ru/forum/325418/page4#comment_16116740
la valeur de ce code.... Vous pouvez créer votre propre objet dynamique.... n'importe où dans le code. et ne prenez pas la peine de le mettre à jour et quand vous quitterez le programme, il sera cloué par lui-même
le nombre de ces minuteurs n'est limité que par votre imagination... Je voulais déplacer un sprite - j'ai créé un objet qui a rampé du bord gauche de l'écran vers la droite et s'est tué - pour ainsi dire, une autonomie complète.
...trop paresseux pour écrire un exemple, tâche peu intéressante
Oui, j'ai jeté un coup d'oeil rapide.
n'a pas compris.
Oui, j'y ai jeté un coup d'oeil rapide.
n'a pas compris ce point.
Je ne sais pas pourquoi le code ressemble à ça maintenant, mais il devrait l'être :
mais vous n'avez pas besoin de ces méthodes pour la minuterie, à mon avis.
ZS : l'objet peut se tuer lui-même comme ceci
Je ne sais pas pourquoi le code est comme ça, mais il devrait l'être :
mais vous n'avez pas besoin de ces méthodes pour la minuterie, à mon avis.
L'objet peut se tuer lui-même comme ceci
Je l'ai eu, grâce à vous et @fxsaber. Je l'ai gardé dans ma tirelire.
Mais, bien sûr, il n'y a pas de réponse à ma question dans ce code.