Frage zum Tippen - Seite 5

 
Ilya Malev:
P.S., ah, d.h. Sie wollten einen binären Operator als unären überladen (2-binär als 1-binär), dann ja, natürlich nicht ein Datum. Die einzige Ausnahme ist [].

Ja, in MQL ist es starr vorgeschrieben, was und wie man überlädt, in C++ spielt es keine Rolle, was man überlädt, man wird es auf die gleiche Weise aufrufen - wenn Sie ^ als unary überladen, werden Sie es in Zukunft als unary verwenden

 
Igor Makanu:

Ja, in MQL ist es streng spezifiziert, was und wie man überlädt, in C++ spielt es keine Rolle, was man überlädt, man kann es auf die gleiche Weise aufrufen - man überlädt ^ als unary und man wird in Zukunft unary verwenden.

Ja, es scheint, dass es noch viele Einschränkungen in mql gibt, so dass es Raum für Verbesserungen gibt :)

Ich würde auch gerne die Möglichkeit haben, binäre Operationen als unär zu überladen (und umgekehrt).

Da beim Überladen ohnehin oft die ursprüngliche Bedeutung verloren geht, bzw. die Verwendungslogik nicht mehr mit dieser Bedeutung verbunden ist. Es wäre logisch, dies zuzulassen.

 
Ilya Malev:

Ja, es sieht so aus, als gäbe es immer noch eine Menge Einschränkungen in mql, es gibt Raum für Verbesserungen :)

Es gibt viele von ihnen, und diese Beschränkungen erscheinen, verschwinden dann, und dann wieder fünf... es scheint, dass Entwickler manchmal die Entwicklungsumgebung ändern ))))

Zum Beispiel werden in der Hilfe im Abschnitt Überladen von Operationen (Operator) Beispiele für die Arbeit mit Matrizen jetzt nicht mehr kompiliert, obwohl ich weiß, dass sie früher funktioniert haben, aber jetzt gibt es eine Überprüfung des Typs der Parameter, die an der Überladung von Operationen beteiligt sind, d.h. wenn ich

int operator*(const int) dann int operator*(int) wird nicht kompiliert und es gab ein solches Beispiel in der Hilfe, das nicht mehr kompiliert wurde

 
Ilya Malev:

Liebe Programmiererinnen und Programmierer, ich habe lange über eine Frage gegrübelt. Ist es möglich, die implizite Typisierung des Rückgabewerts einer Funktion irgendwie zu erreichen und durchzuführen? So würde die Klassenmethode einen Wert eines anderen Typs mit der externen Identität des Methodenaufrufs zurückgeben.

Und darf ich fragen: Wofür brauchen Sie es? Kann man ein Raumschiff nicht ohne sie bauen?

 
Vasiliy Sokolov:

Darf ich fragen, wofür Sie es brauchen? Kann man ein Raumschiff nicht ohne sie bauen?

Und darf ich fragen: Worin besteht Ihr Interesse daran?

 

Übrigens ist es nicht einmal eine Überladung des Rückgabetyps.

Im Allgemeinen ist diese Idee weit davon entfernt, realisierbar zu sein.

 
Vasiliy Sokolov:

Darf ich fragen, wofür Sie es brauchen? Kann man ein Raumschiff nicht ohne sie bauen?

Ich war anfangs auch kritisch, aber dann dachte ich, ich könnte es auch für mich verwenden:

class Point {
public:
   double price;
   long time;
   operator double()const {return price;}
   operator long()const {return time;}
};

class Array {
   Point p[3] = {{0,1}, {2,3}, {4,5}};
public:
   const Point &operator[](unsigned i) {return p[i];}
};

void start()
{
   Array a;
   double d = a[2];  // d == 4
   long t = a[2];    // t == 5
}
 
Dmitry Fedoseev:

Übrigens handelt es sich nicht einmal um eine Überladung des Rückgabetyps.

Captain Obvious in der Resque?

 
Ilya Malev:

Captain Obvious in der Resque?

Shift+Alt, falls Sie es vergessen haben.

 
C# hat explizite und implizite Konvertierungen. Es scheint bequemer Zucker zu sein, aber sehr implizit und IntelliSense wird schweigen. In einem Monat werden Sie vergessen haben, welche Klasse in was umgewandelt werden kann. Ein OOP-Spiel im Allgemeinen, aber nett.