OOP, templates et macros dans mql5, subtilités et utilisations - page 3

 
Алексей Тарабанов:

Vous avez trouvé un moyen de le créer.

Vous êtes confus à propos de quelque chose.
 
Ilya Malev:

Vous essayez d'utiliser un champ statiqued'une classe à l'étape d'initialisation avant qu'au moins une instance de cette classe ait été créée. A mon avis, c'est une perversion... C'est ainsi que cela fonctionne normalement :

Le principe d'encapsulation implique généralement que ces champs doivent être cachés et non publics.

Un champ statique est pour cette raison qu'il ne dépend pas de la présence d'instances de la classe. Mais si vous voulez d'abord créer une instance de la classe - ok, créez-la, mais seulement à l'intérieur de la fonction. Et demandez ce champ à partir de celle-ci (soit directement, soit par une méthode) - le résultat est encore le même.

 
Alexey Navoykov:
Vous êtes confus à propos de quelque chose.

Non, je ne suis pas confus à propos de quoi que ce soit.

Les variables de niveau global d'abord, puis les variables statiques et enfin les variables locales au fur et à mesure qu'elles apparaissent dans le code.

Cet exemple particulier enfreint la recommandation de la documentation de ne pasinitialiser les variables avec des fonctions. Il était plus facile pour les développeurs d'écrire un tel avertissement que d'expliquer où ils doivent et ne doivent pas.

Supprimez l'électricité statique de votre échantillon et obtenez le résultat que vous souhaitez.

 
Алексей Тарабанов:

Non, je ne suis pas confus à propos de quoi que ce soit.

Les variables de niveau global d'abord, puis les variables statiques et enfin les variables locales au fur et à mesure qu'elles apparaissent dans le code.

Cet exemple particulier enfreint la recommandation de la documentation de ne pasinitialiser les variables avec des fonctions. Il était plus facile pour les développeurs d'écrire un tel avertissement que d'expliquer où ils doivent et ne doivent pas.

Retirez les statiques de votre exemple et obtenez le résultat souhaité.

"Recommandation de la documentation" )) Vous m'étonnez. Vous ne comprenez toujours pas, n'est-ce pas ? Il y a un bug dans la langue. Les développeurs eux-mêmes en parlent, et vous expliquent comment bien tambouriner pour ne pas rencontrer ce bug. J'ai fait en sorte d'oublier ce bug une fois pour toutes.
 
Alexey Navoykov:

Si c'est une constante (et la visibilité globale déclare le plus souvent des constantes, si le code est intelligent), il n'y a pas d'autre choix.

Concernant tout ce qui est en jaune, j'ai une question : POURQUOI ? J'ai déjà trouvé comment résoudre le problème.

ICI afin de ne pas gâcher ce que vous avez déjà fait.

 
Alexey Navoykov:
"Recommandation de documentation" )) Je suis stupéfait par toi. Vous n'avez toujours pas compris ? Il y a un bug dans la langue. Les développeurs eux-mêmes en parlent, et vous expliquent comment faire correctement du tambourin pour ne pas rencontrer ce bug. J'ai fait en sorte d'oublier ce bug une fois pour toutes.

Vous ne pouvez pas initier la valeur de quelque chose avec une fonction. Même si vous le voulez vraiment. Tu ne comprends pas ?

 
Alexey Navoykov:

Un champ statique est un champ statique, il ne dépend donc pas des instances de la classe. Mais si vous voulez d'abord créer une instance de la classe, d'accord, créez-la, mais seulement à l'intérieur de la fonction. Et demandez ce champ à cette instance (soit directement, soit par une méthode) - le résultat sera encore le même.

Alors, est-ce de la programmation procédurale ou orientée objet ? Pourquoi devrions-nous exécuter des fonctions non liées aux classes à l'étape précédant l'initialisation en référence à des objets typés d'ailleurs. Je comprends que la réponse soit "parce que j'en ai envie". Mais si j'étais le développeur, je ne me dépêcherais pas de tout annuler et de courir pour corriger ce comportement particulier, car il s'agit d'une architecture plutôt marginale et de plus, le problème est facilement résolu en créant une instance de la classe. Pas à l'intérieur de la fonction, bien sûr.

 
Alexey Viktorov:

POUR TOUJOURS, afin de ne pas faire un gâchis du gâchis que vous avez déjà fait.

Je l'ai déjà fait et je ne le regrette pas du tout. Vous, par contre, semblez prendre un grand plaisir à vous contraindre avec les restrictions artificielles imposées par MQ. Peut-être êtes-vous masochiste ? ) Et pourtant, vous essayez avec insistance de me convaincre que c'est la façon de faire. Ce n'est pas nécessaire, c'est forcé.
 
Алексей Тарабанов:

Vous ne pouvez pas initier la valeur de quelque chose avec une fonction. Même si vous le voulez vraiment. Tu ne comprends pas ?

Oui, je ne comprends pas. Expliquez.
 
Ilya Malev:

S'agit-il donc de programmation procédurale ou orientée objet ? Pourquoi, tout d'un coup, effectuer des fonctions non liées aux classes avant l'initialisation par rapport aux objets typés. Je comprends que la réponse soit "parce que j'en ai envie". Mais si j'étais le développeur, je ne me dépêcherais pas de tout annuler et de courir pour corriger ce comportement particulier, car il s'agit d'une architecture plutôt marginale et de plus, le problème est facilement résolu en créant une instance de la classe. Pas à l'intérieur d'une fonction, bien sûr.

Vous êtes donc un partisan de l'utilisation massive des variables globales, si je comprends bien. Dans ce cas, il est peu probable que vous et moi nous comprenions.

En outre, la fonction elle-même peut être un modèle. et l'instance créée, respectivement, doivent être paramétrées par le même type :

template<typename T>
int f()
{  
  A<T> a;
  return a.f();
}

Que faites-vous ?

Raison: