Der Artikel hat mir gefallen, auch wenn ich nichts verstanden habe.
"Deshalb besteht die Hauptaufgabe, die durch Vorlagen gelöst wird, immer noch darin, die Menge des Codes zu reduzieren, den ein Programmierer über die Tastatur eingibt."
Warum sich mit Vorlagen abmühen, wenn man auf Copy-Paste verzichten kann? Und die Menge des eingetippten Codes stört Sie überhaupt nicht - gut, es werden 300 Codezeilen statt 100 sein - was ist also falsch? Die Hauptsache ist, dass es funktioniert und die Fehlersuche nicht überlastet wird.
Und der Code wird ohne Templates transparenter sein.
Der Artikel hat mir gefallen, auch wenn ich nichts verstanden habe.
"Deshalb besteht die Hauptaufgabe, die durch Vorlagen gelöst wird, immer noch darin, die Menge des Codes zu reduzieren, den ein Programmierer über die Tastatur eingibt."
Warum sich mit Vorlagen abmühen, wenn man auf Copy-Paste verzichten kann? Und die Menge des eingetippten Codes stört Sie überhaupt nicht - gut, es werden 300 Codezeilen statt 100 sein - was ist also falsch? Die Hauptsache ist, dass es funktioniert und die Fehlersuche nicht überlastet wird.
Und der Code wird ohne Templates transparenter sein.
300 :)
Wie wäre es mit 10-20K (und das unter Berücksichtigung der Aufteilung in Module)...? ?
300 :)
Und 10-20K, wie sieht es bei Ihnen aus (und das unter Berücksichtigung der Aufteilung in Module) .... ?
Sind das 20.000? Mein Gott, wie kommt man denn da rein? Vielleicht ist der Algorithmus noch nicht ausgereift? Solche Größenordnungen hätten schon längst in Bibliotheken aufgenommen werden müssen. Was programmieren Sie da? 20.000 Zeilen, das sind 10 Programmierer für sechs Monate Arbeit.
Was die Bibliotheken betrifft, so habe ich Ihnen gesagt, dass die Modularität berücksichtigt werden muss.
Was die 20.000 Zeilen angeht, so haben wir schon mehr gesehen. Zum Beispiel, modzli für 1C 7.7 sind 50K Zeilen (und das ist nicht ihre eigenen, sondern jemand anderes Code).
Verzeihen Sie mir, wenn ich das Wesentliche der Aufgabe nicht verstehe. In C++ gibt es das Speichern von Quellcodesätzen, hier nicht. Funktionsvorlagen in C++ zeigen, wo man wirklich Geld sparen kann. "Quellcode einsparen" ist der Schlüsselbegriff.
Und eine offensichtlich übermäßige Menge an Quellcode zu erzeugen, um die spätere Arbeit daran zu erschweren, nun, nein, bitte.
Benötigen Sie die gleiche Funktion für verschiedene Datentypen? MQL5 hat Methodenüberladung. Ich bezweifle nicht, dass Sie darüber Bescheid wissen. Zumal eine Änderung des Typs der Eingabedaten oft eine Änderung der Implementierung erfordert.
Und zu diesem Thema:
>>Zum Debuggen müssen Sie die Datei natürlich in das Verzeichnis der aufgerufenen Datei oder das Include-Verzeichnis verschieben. Das ist genau die Unannehmlichkeit beim Debuggen, von der ich oben sprach, als ich die Nachteile von Pseudo-Templates erwähnte.
Sie brauchen nichts manuell zu verschieben.
#property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Experteninitialisierungsfunktion| //+------------------------------------------------------------------+ void gena() { string filename="code.mqh"; int handle=FileOpen(filename,FILE_WRITE|FILE_UNICODE); //-- willkürliche Codeerzeugung string st=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES|TIME_SECONDS); string code="MessageBox(\"Hallo Welt! Jetzt: "+st+"\");\r\n"; //------------------------------ FileWriteString(handle,code); FileClose(handle); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnInit() { //--- gena(); #include "../Files/code.mqh"; //den generierten Code einbinden //--- return(0); }
Das Beispiel ist primitiv. Einschlüsse können innerhalb von Funktionen eingefügt werden. Und der gesamte Code in der eingeschlossenen Datei wirkt innerhalb des Sichtbarkeitsbereichs der Einfügestelle. Das Einzige, was Sie tun müssen, ist, eine leere Datei code.mqh in Files zu erstellen, damit der Compiler nicht flucht. Beim ersten Durchlauf wird der Code erstellt, und beim zweiten Durchlauf wird er das generierte Stück einschließen.
Nikolai, ich habe eine Frage. Haben Sie eine Funktion, die eine Zeichenkette auswerten würde? D.h. z.B.:
Ich brauche eine void eval(str) Funktion, mit dem Ergebnis a=1.5.
Der Artikel ist gut, vielen Dank!
Ich verstehe, dass es bei der Frage nicht um die Auswertung geht, sondern um das Parsen. Parsing ist sehr vielseitig.
Sie können verschiedene Regeln schreiben. Es hängt alles davon ab, was man erreichen will.
Zum Beispiel: Wie soll sich der Parser in solchen Beispielen verhalten?
"double a=1.5;" "double a =1.5;" "double a = 1.5;" "double a=1.5,b=2.5;" "double a =1.5,b =2.5;" "double a = 1.5,b = 2.5;" "double a = 1.5 , b = 2.5 ;"Sie wissen schon. Ich kann Ihnen nur empfehlen, die Funktionalität des Abschnitts über die Stringfunktionen an einfachen Beispielen zu studieren. Wenn Sie in der Lage sind, Funktionen aus dem Speicher zu bedienen, können Sie Ihre Entwicklung auf der Grundlage der Möglichkeiten der Funktionalität planen. Ohne darüber nachzudenken, was Sie tun können und was nicht. Wenn Sie die Möglichkeiten der Funktionalität kennen, werden Sie eine klare Vorstellung davon haben, welcher Algorithmus für die Lösung Ihrer Aufgabe am besten geeignet ist.
Die Frage bezieht sich also nicht auf die Auswertung, sondern auf das Parsing. Parsing ist sehr vielseitig.
Man kann verschiedene Regeln haben. Es hängt alles davon ab, was man erreichen will.
Zum Beispiel: wie sich der Parser in solchen Beispielen verhalten soll.
Sie wissen schon. Ich kann Ihnen nur empfehlen, die Funktionsweise des Abschnitts Stringfunktionen an einfachen Beispielen zu studieren. Wenn Sie in der Lage sind, Funktionen aus dem Speicher zu bedienen, können Sie Ihre Entwicklung auf der Grundlage der Möglichkeiten der Funktionalität planen. Ohne darüber nachzudenken, was Sie tun können und was nicht. Wenn Sie die Möglichkeiten der Funktionalität kennen, werden Sie eine klare Vorstellung davon haben, welcher Algorithmus für die Lösung Ihrer Aufgabe am besten geeignet sein wird.vielen Dank für die Antwort... Ich werde die Frage studieren
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Nutzung von Pseudo-Templates als Alternative für C++-Templates :
Dieser Beitrag beschreibt eine Art der Programmierung ohne Templates, allerdings unter Beibehaltung des ihnen eigenen Programmierstils. Er schildert die Implementierung von Templates mithilfe von benutzerdefinierten Methoden und bietet ein vorgefertigtes, angehängtes Script zur Erstellung eines Codes auf Basis festgelegter Templates.
Prüfung der Arbeit
Führen wir zunächst das Script zum Festlegen aller erforderlichen Parameter aus. Geben Sie im geöffneten Fenster den Dateinamen "Example templat" ein.
Füllen Sie die Felder der benutzerdefinierten Datentypen mithilfe des Trenners ';' aus.
Sobald die Schaltfläche "OK" gedrückt wird, wird das Verzeichnis Templates erstellt. Es enthält die Vorab-Template-Datei "Example templat.mqh".
Dieses Ereignis wird mit der folgenden Meldung im Logbuch angezeigt:
Autor: Nikolay Demko