Erreurs, bugs, questions - page 1736

 
fxsaber:

Je suis très intéressé ! Veuillez expliquer la réponse du Service Desk avec un exemple.

& == GetPointer(). * - rien n'a changé.

De quel exemple avez-vous besoin ?
 
coderex:

si quelqu'un est intéressé, la réponse est servicedesk :

На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue
L'autre jour, je leur ai envoyé une suggestion concernant l'introduction de pointeurs pour tout type de données. Et cette restriction ridicule est ennuyeuse.
 
Alexey Navoykov:
À propos, je leur ai envoyé l'autre jour une proposition concernant l'introduction de pointeurs pour tout type de données. Et cette restriction ridicule est déjà ennuyeuse.
Il serait bien d'introduire la surcharge de l'opérateur *, parce que sans elle nous ne pouvons pas réaliser l'identité avec la STL, aussi il serait bien d'introduire le typedef en entier, pas seulement sur le calback`i
 
coderex:
il serait bien d'introduire la surcharge de l'opérateur *, parce que sans elle nous ne pouvons pas réaliser l'identité avec la STL, aussi il serait bien d'introduire le typedef en entier, pas seulement sur le calback`i
Oui, je suis d'accord. Tout est dans un état inachevé. Et en termes de surcharges, je suis plus intéressé par l'opérateur fantôme, il est difficile de s'en passer.
 
coderex:
Quel genre d'exemple voulez-vous ?
Ce que vous attendez de * et de &. Quelque chose de simple mais d'illustratif. Donc vous pouvez voir la commodité.
 
fxsaber:
Ce que vous attendez de * et de &. Quelque chose de simple mais d'illustratif. Pour voir la commodité.

Ce que je veux, je l'ai déjà écrit plus haut.

Vous pouvez inventer vous-même un exemple avec l'opérateur '&' où vous utilisez GetPointer(...), c'est essentiellement une forme courte

L'exemple avec l'opérateur '*' - je ne sais pas si cela vous aide à comprendre :

class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };

int main(int argc, char **argv) {
   Iterator *_it = new Iterator(5);
  
   int _val = **_it;
//---
   return 0;
}


cela fonctionne en C++, mais en MQL vous devrez faire un geter pour obtenir m_value.

 

Ajoutez à l'aide que ChartRedraw(MainChartID) ne convient pas pour redessiner OBJ_CHART. La fonction ChartRedraw(ObjChartID) est requise.

Par conséquent, l'exemple donné dans l'aide est incorrect.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Veuillez ne pas limiter l'échelle à N <= 5 (taille de la zone sous la barre = 2^N).

Ceci est nécessaire (et est devenu pratique) pour pouvoir examiner plus en détail l'historique des tics.

 
Veuillez clarifier. Script
class A
{
public:
  const int a;
  
  A( int c = 0 ) : a(c) {}
  
  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};

class B : public A
{
public:
  const int b;
  
  B( int c = 0 ) : A(c), b(this.f()){}

  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};


void OnStart()
{
  B b;  
  A* a = new B;
  
  delete a;
}

Résultat

2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f
2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f

Quelle est la raison de la sortie de B::F et non de A::f ? Le script est écrit de telle manière que f est appelé AVANT que le corps du constructeur ne soit exécuté (en gras). Mais à ce stade, le constructeur de la classe de base A a déjà été appelé. C'est pourquoi this.f() semble faire exactement référence à la classe de base avant que le constructeur B ne soit appelé. Veuillez expliquer où se situe l'erreur de raisonnement/prédiction.

 
Ou une situation encore plus simple.
class A
{
  const int a;
  
  A() : a(this.f()) {}
  
  int f() { return(0); }
};
Pourquoi est-ce que ça compile ? C'est utilisé même AVANT que le corps du constructeur soit appelé.