Moinmoin,
da hier
Unittests generieren die Frage aufgekommen ist, ob das Konzept, das als eigene Typen zu implementieren, stell ich hier mal die Frage nach Alternativen (schließlich kann auch ein SE mal irren).
Dabei ist das ganze als Grundstock für ein größeres Bibleotheks-Projekt gedacht. Dabei gibts natürlich einige Anforderungen:
1. Die einzelnen Typen sollen sicher und eindeutig sein.
Gemeint ist, das, wenn man das ganze als Parameter an eine Methode übergibt, keine andere Maßeinheit
übergeben werden kann
Beispiel:
Procedure TuWas(const a:gramm);
Wenn versucht wird, hier Kilogram zu übergeben, soll der Compiler meckern.
2. Rechenoperationen sollen möglich sein. D.h. Addition, Subtraktion, Division und Multiplikation
3. Vergleichsoperation sollen auch möglich sein.
4. Eine Möglichkeit, von einer Maßeinheit in eine andere Maßeinheit zu konvertieren/umzurechnen
Wärend der Konzeptions und Tüftelphase (
) bin ich auch auf das ein oder andere Problem gestoßen:
a) Klassen funktionieren hier nicht
Das größte Manko hier ist, das man keine Operatoren in Klassen definieren kann. Ein zweites, wenn auch
weniger wichtiges Manko ist, das Klassen explizit erzeugt werden müssen.
b) Records können nicht wirklich vererbt werden
Ansonsten hätte man einen "Basistypen" geschaffen, und den Rest einfach davon abgeleitet, so das
man das ganze mit weniger Aufwand umsetzen hätte können.
c) Kein wirkliches forwarding bei Records
Da man Records nur mit Zeigern forwarden kann, müssen einiges an Operatoren an ungewöhnlicher Stelle
implementiert werden. D. h. dass zu Beispiel der Add-Operator für Gramm+Kilogram bei Kilogram implementiert
wird, obwohl der Rückgabewert Gramm ist.
Daher der Ansatz, für jede Maßeinheit einen entsprechenden Record schaffen.
Wenn jemand einen alternativen Ansatz hat, immer her damit