Fehler, Irrtümer, Fragen - Seite 1966

 
A100:
Ich meinte, dass allein die Möglichkeit, eine Methode außerhalb einer Klasse zu platzieren, praktisch ist.

Ja, man quält und quält, und dann stellt sich heraus, dass man bestimmte Geheimnisse hätte kennen müssen).

Vielleicht haben sie auch eine Spezialisierung der Musterklassen? Ich weiß es nicht, aber ich bin mir sicher, dass sie eine clevere Methode haben, dies zu tun. Ich habe sie lange im Service Desk gefragt und sie haben geschwiegen. Wahrscheinlich haben sie auch einige Geheimnisse. Verschütten )

 
Alexey Navoykov:

Vielleicht haben sie auch eine Spezialisierung auf Musterklassen?

Das ist so lange her!

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.08.16 13:19

typedef void (*fn)();

template<typename T>
void g( T Value ) { Print(typename(Value)); }
void f() {}

void g( fn Value ) { Print(typename(Value)); }
void OnStart()
{
        g( f ); // void(*fn)()
}

Oder haben Sie etwas anderes im Sinn?


ZS hat es gefunden.

 
fxsaber:

Wie lange ist das jetzt her?

Oder haben Sie etwas anderes im Sinn?

ZS hat es gefunden.

Nein, ich habe von Klassenvorlagen gesprochen, nicht von Funktionen.

Übrigens ist die Spezialisierung von Funktionsvorlagen noch nicht wirklich implementiert worden. Was in Ihrem Link aus irgendeinem Grund als "Spezialisierung" bezeichnet wird, ist eigentlich etwas ganz anderes. Und im Moment gibt es nur die Möglichkeit der Überladung mit bestimmten Typen. Der einzige Unterschied besteht darin, dass der Compiler die Identität der Signatur aller überladenen Funktionen nicht kontrolliert. Dies ist notwendig, wenn sich die Funktionen an verschiedenen Stellen im Code befinden.

 
A100:

So ist es viel bequemer.

Falls es keine Spezialisierungen gibt.
 
Alexey Navoykov:

Übrigens ist die Spezialisierung von Funktionsvorlagen noch nicht wirklich umgesetzt worden. Was in Ihrem Link als "Spezialisierung" bezeichnet wird, ist nicht wirklich das, was es ist. Und im Moment gibt es nur die Möglichkeit der Überladung mit bestimmten Typen. Der einzige Unterschied besteht darin, dass der Compiler die Identität der Signatur aller überladenen Funktionen nicht kontrolliert. Dies kann erforderlich sein, wenn sich die Funktionen in verschiedenen Codefragmenten befinden.

Ohne ein Beispiel verstehe ich es nicht.

 
fxsaber:

Ohne ein Beispiel verstehe ich das nicht.

In der Tat habe ich übertrieben, als ich sagte, es sei "so ziemlich dasselbe". Die Unterschiede sind signifikant, da nur Funktionsargumente überladen werden können und es andere Typnamen in der Vorlage geben kann, die sich nicht auf Argumente beziehen. Und sie können nur spezialisiert sein. Zum Beispiel eine Vorlage ohne jegliche Argumente:

template<typename T>
void f() { }

template<>
void f<int>() { }
 
Alexey Navoykov:
Spezialisierung ohne Argumente? )) Worauf werden Sie sich spezialisieren?
 
Комбинатор:
Spezialisierung ohne Argumente? )) Und wofür wird die Spezialisierung sein?
Nun, das müssen Sie im Hauptteil der Funktion entscheiden. Was ist hier los? Ich habe sehr oft ein solches Bedürfnis. Ich muss es herausfinden, indem ich einen Dummy-Parameter übergebe, was sehr knackig ist.
 
Alexey Navoykov:
Was ist denn so schlimm daran?
Nichts, wenn Sie es kompilieren und bei den Profis zum Laufen bringen können)
 

Unmittelbar nach dem Upgrade auf Build 1650, wenn ein nicht kompilierter Expert Draw aus dem Navigator/Favoriten auf ein Diagramm gezogen wird, kann MQL5 die Datei 'Draw.ex5' nicht öffnen -> ein anderer Expert Advisor wird gestartet, nämlich ExpertMACD

Alles wurde behoben, nachdem die Kompilierung von Draw abgeschlossen ist, aber es ist eine Tatsache, dass

Ich sollte hinzufügen: Die Situation wiederholt sich - anstelle eines nicht kompilierten Expert Advisors wird ExpertMACD gestartet

Grund der Beschwerde: