OOP, Vorlagen und Makros in mql5, Feinheiten und Anwendungen - Seite 13

 

Gerade gestern diskutierten wir über diesen Fehler mit abstrakten Methoden, aber heute lief ich in den gleichen Fehler in meinem Code ) Ich verwendet, um nicht-abstrakte virtuelle Methode in Basisklasse haben, so dass ich es von geerbten Klassen verweisen, dann entschied ich mich, die Methode abstrakt zu machen, aber Compiler informierte mich nicht, dass es nicht mehr referbable ist. Infolgedessen war der Rekursionsfehler der unangenehmste und am schwersten zu erkennende, und ich habe viel Zeit verloren. Jetzt denke ich, dass die Funktion mit abstraktem Standard-Methodenkörper hier sehr nützlich sein wird, zumindest bis dieser Fehler behoben ist.

 
Alexey Navoykov:

Ja, um die Zuordnung von Fliegen zu Koteletts so einfach wie möglich zu machen, und niemand hat auch nur mit der Wimper gezuckt.)

Wenn der Zuordnungsprozess Fliegen zu Koteletts bringt (oder eine Fehlermeldung ausgibt, wenn dies nicht möglich ist), ist alles in Ordnung.

Alexey Navoykov:

Warum sollte man ein Muster deklarieren, wenn sein Parameter keinerlei Bedeutung für das Verhalten der Klasse hat?

2) Das ist zu viel Aufwand. Übergabe der Typsteuerung an die Ausführungsphase... Ihre Codes werden jahrelang debuggt werden müssen

1. "Nur Klasse A" kann kein Feld eines beliebigen Typs ohne seine (Klassen-)Parametrisierung enthalten. Und ohne dieses Herumtanzen, das ich beschrieben habe, ist es unmöglich, eine einheitliche Behandlung eines Klassenparameters per Referenz und per Wert vorzunehmen.

2. Sie haben es bereits wie ein Mantra - in diesem Fall absolut eindeutige Aufzeichnung garantiert, dass F ist T, das ist, als ob es keine Aufzeichnung der zweiten Vorlage. aber nein. Wieder "Ich werde Jahre mit der Fehlersuche verbringen" ))))))

 
Ilya Malev:

1. "Nur Klasse A" kann kein Feld eines beliebigen Typs ohne seine (Klassen-)Parametrisierung enthalten. Und ohne die von mir beschriebene Bastelei ist es unmöglich, eine einheitliche Behandlung eines Klassenparameters per Referenz und per Wert vorzunehmen.

2. Sie haben es schon wie ein Mantra - in diesem Fall absolut eindeutige Aufzeichnung garantiert, dass F ist T, das ist, als ob es keine Aufzeichnung der zweiten Vorlage. aber nein. Auch hier gilt: "Ich werde Jahre mit der Fehlersuche verbringen" ))))))

Und warum antwortest du in diesem Thread? Code an einer Stelle, Diskussion an einer anderen... )

1. Ja, alles kann menschlich und fast ohne Tanz gemacht werden:

struct __A
{
  template<typename T>
  void f(T&) { }  // Сюда структуры и классы
};

struct A : __A
{
  template<typename T>  
  void f(T) { }  // Сюда простые типы и указатели
};

2. das ist nicht das, was ich meinte, aber das macht nichts.

 
Alexey Navoykov:

Warum antworten Sie in diesem Thread? Code an einem Ort, Diskussion an einem anderen... )

1. Ja, alles kann auf menschliche Art und Weise und fast ohne Tanzen gemacht werden:

2. es gab da noch etwas anderes, aber das ist nicht der Punkt.

Es ist ja nicht so, dass du ein Moderator bist und bestimmen könntest, in welchem Thread was angemessener ist. Und die Moderatoren haben bereits klargestellt, dass Diskussionen über Features nicht im Feature-Zweig selbst, sondern in einem separaten Zweig, also hier, geführt werden sollten.

In Ihrer Beschreibung ist überhaupt nicht klar, wie man sich einheitlich auf eine Klassenmethode per Referenz und durch einen Wert vom Typ T beziehen kann. Ich weiß nicht, was Sie damit meinen, aber es war genau das, was ich dort meinte.

 
Ilya Malev:

Es ist ja nicht so, dass Sie ein Moderator sind, der bestimmen kann, welche Themen besser geeignet sind. Und die Moderatoren haben bereits deutlich gemacht, dass die Diskussion über Funktionen nicht in der Branche der Funktionen, und in einem separaten Thread, dh hier gehalten werden sollte.

Wenn also ein Moderator sie verschieben will, ist das eine Sache, aber warum sollten Sie selbst für Verwirrung sorgen? Ich zum Beispiel habe keine Lust, die Themen durchzugehen.

 
Alexey Navoykov:

Wenn also ein Moderator sie verschieben will, ist das eine Sache, aber warum sollten Sie selbst für Verwirrung sorgen? Ich zum Beispiel habe keine Lust, die Themen durchzugehen.

Wenn Sie wissen, dass ein Moderator so etwas tun würde, ist es immer besser, es selbst zu tun, als darauf zu warten, dass ein Moderator es tut. Allerdings gehört das Diskutieren über die Handlungen der Moderatoren auch nicht zu den Lieblingsmenüs der Moderatoren, so dass es besser wäre, wenn wir dies einstellen würden.

 
Alexey Navoykov:
Сюда простые типы и указатели

Für Zeiger ist es übrigens logisch, eine eigene Methode mit dem T*-Argument zu erstellen, denn es gibt definitiv keine Verwechslung, und der Vorteil ist meist, dass sich die Handhabung von Zeigern von der von regulären Typen unterscheidet (Gültigkeitsprüfung, Löschen usw.)

 
Alexey Navoykov:

Code an einem Ort, Diskussion an einem anderen

Hier ist der Code:

template<typename T>
class A
 {
public:
  A* operator<<(T&p){ Print("<< &",typename(T)); return &this; }
  template<typename F>
  A* operator<<(F p){ Print("<< ",typename(F)); return &this; }
 };

Eigentlich gibt es neben diesem Eintrag noch eine andere Lösung: listen Sie alle einfachen Typen, die als Wert übergeben werden, namentlich auf und schreiben Sie dann eine Template-Methode mit &, dann tritt auch kein Fehler auf. Diese Option eignet sich für Klassen ohne intrinsische Parametrisierung

 
Ilya Malev:

Wenn Ihnen klar ist, dass ein Moderator wahrscheinlich genau das tun würde - es ist immer besser, es selbst zu tun, als darauf zu warten, dass ein Moderator es tut. Allerdings ist die Diskussion über die Handlungen der Moderatoren auch nicht gerade ein Lieblingsmenü der Moderatoren, so dass es am besten wäre, wenn wir dies unterlassen.

Ein Moderator würde die Diskussion sicher nicht in verschiedene Threads aufteilen. Wahrscheinlich sind Sie so erpicht darauf, sich selbst zu verbieten,"ohne darauf zu warten, dass ein Moderator es tut" ))
 
Ilya Malev:

Wenn Ihnen klar ist, dass ein Moderator wahrscheinlich genau das tun würde - es ist immer besser, es selbst zu tun, als darauf zu warten, dass ein Moderator es tut. Allerdings ist die Diskussion über die Handlungen der Moderatoren auch nicht gerade ein Lieblingsmenü der Moderatoren, so dass es besser wäre, wenn wir sie einstellen.

1. Es wäre besser, gleich über etwas zu sprechen, wo dieses "Etwas" zu finden ist, als darüber nachzudenken, wie der Moderator es machen würde. Andernfalls wurde alles in zwei Threads aufgeteilt, und selbst wenn ein Moderator entscheidet, dass die Diskussion dort oder dort sein sollte, ist es ziemlich mühsam, die Diskussion auf normale Weise zu verschieben und dabei die Reihenfolge und den Sinn der Beiträge beizubehalten.

2 Über die Handlungen eines Moderators zu diskutieren ist nicht jedermanns Sache... Es geht nicht um jeden Nieser, aber wenn Sie ihn öffentlich herausfordern wollen, bringen Sie ihn dazu, aufzuräumen oder diejenigen zu beschwichtigen, die wild geworden sind. Und wenn Sie eine Meinung haben, wer verbietet Ihnen, diese zu äußern? Vielleicht ist Ihre Meinung ein sehr vernünftiger Vorschlag, aber Sie trauen sich nicht, ihn auszusprechen, um nicht unter das ungeliebte Menü des Moderators zu fallen? Das ist also Blödsinn :)

Grund der Beschwerde: