Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[ Windows/Linux ][ Sprachdefinition ] Templates

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 13.01.2010, 21:39    Titel: [ Windows/Linux ][ Sprachdefinition ] Templates Antworten mit Zitat

Templates sind was tolles. Gerade bei Listen oder anderen universell einsetzbaren Sachen sind Templates wirklich nützlich.

Für alle die es noch nicht wissen: Ein Template (engl. Schablone) ist ein Type den man einmal schreibt und wenn man eine Variable vom Typ des Templates erzeugt übergibt man auch noch gleich einen oder mehrere Datentypen. Im Type können Variablen und Funktionen als Datentyp einen Bezeichner verwenden, der dann später durch den jeweiligen Datentyp ersetzt wird.

Soviel zur Theroie, jetzt kommt was man sich denken kann:
FreeBASIC kanns nicht.

So würde vielleicht ein Beispiel aussehen das Templates verwendet:
Code:
template container
  as t1 var1
  declare sub p()
end template


sub container.p()
    print var1
end sub




dim as container<<<string>>> c

c.var1 = "Hallo2"
c.p()




dim as container<<<integer>>> c2

c2.var1 = 42
c2.p()

sleep

'Lässt sich nicht kompilieren

Anstatt type und end type würde man vermutlich template und end template verwenden.
Wie man sehen kann werden zwei Instanzen des Types erzeugt, eine mit string und eine mit Integer.
Würde FreeBASIC jetzt Templates unterstützen wären die beiden Zuweisungen absolut in Ordnung.
Als Datentyp für die Variable im Template wird der Bezeichner t1 verwendet, der offenbar zu Integer wird wenn man Integer übergibt, und String wird wenn man String übergibt.

Das Beispiel endet mit einem Kommentar: "Lässt sich nicht kompilieren."
Seit ihr euch wirklich sicher?
Lässt sich der Quelltext doch kompilieren?
Die Antwort lautet ganz klar: Nein!

Jetzt könnte man sich denken das ich hier ganz sicher nicht ins Projektforum schreibe was FreeBASIC nicht kann.

Bevor du jetzt weiter liest, schau dir dieses Video an:
http://users.freebasic-portal.de/stueber/template/template.7z

Was passiert? Zuerst wird gezeigt das das Beispiel viele Fehler ausgibt.
Aber was ist das, nach einer kleinen Änderung im Compileraufruf gibt es keine Fehler mehr.

Wie kommt das? Die Antwort ist: Ein Vorcompiler!
Ich habe in den letzten Tagen einen Vorcompiler geschrieben der sich zwischen fbc und die IDE deiner Wahl schält und dafür sorgt das so ein Programm wie oben gezeigt funktioniert.

Die Installation ist denkbar einfach:
1. Ladet euch den Vorcompiler hier runter.
2. Öffnet den Installationsordner von FreeBASIC.
3. Benennt fbc.exe genau so um: fbc2.exe
4. Kopiert die Dateien QtCore.dll, mingwm10.dll, libgcc_s_dw2-1.dll und fbc.exe aus dem Archiv in den FreeBASIC Ordner.

Jetzt kannst du auch das Beispiel von weiter oben mit oder ohne der IDE deiner Wahl kompilieren.
Da dieses Projekt sehr kompliziert war würde ich mich auf eure ehrliche Meinung freuen.

Entfernen tut man den Vorcompiler wieder indem man einfach die vier Dateien aus dem FreeBASIC Ordner wieder löscht und den echten Compiler wieder umbenennt.

Bekannte Fehler:
- Man kann keine Operatoren eines Templates überladen.
- Hat man z.B. eine Datei test1.bi und eine andere test2.bi die sich gegenseitig per #include einbinden, kommt es zu einer Endlosschleife.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz