![]() |
AW: Gibt es keine generischen Proceduren?
Dafür ist es aber nicht nötig, lose umherschwirrende Funktionen zu implementieren. Man kann dafür auch Sammelklassen mit genetischen Klassenmethoden erstellen. Die kann man auch überall nutzen, aber man sieht, wo die herkommen. Dafür könnte man auch den Unitnamen vorstellen, aber das wäre dann optional, was für ein Team nicht optimal wäre.
So habe ich dann TStringTools, TMathTools, usw. in entsprechenden Units Lib.Tools.MathTools.pas usw. im Ordner lib\tools, so dass man sich intuitiv zurechtfindet. |
AW: Gibt es keine generischen Proceduren?
Ich habe mich schon oft gefragt, ob es möglich ist, eine generische Funktion zu schreiben, ob ein bestimmtes Element in einer Aufzählung vorhanden ist.
EDIT: Das war jetzt etwas schlampig ins Handy geschrieben. Ich mache selten Enumerationen, ohne auch ein Set dafür zu deklarieren. Ich meinte also natürlich eine generische Funktion, um das Vorhandensein in einem Set zu prüfen. |
AW: Gibt es keine generischen Proceduren?
Zitat:
Geht doch auch so mit einem kurzen Einzeiler. Wüsste nicht was man da für eine Funktion bauen könnte die das vereinfacht oder Mehrwert bietet.
Delphi-Quellcode:
lEnum := Enum1;
lSet := [Enum1,Enum2]; if lEnum in lSet then Oder if Enum1 in [Enum1,Enum2] then oder auch if Enum1 in [Low(TMyEnum)..High(TMyEnum)] then |
AW: Gibt es keine generischen Proceduren?
Natürlich geht das. Aber es gibt auch so etwas
Delphi-Quellcode:
If (lSet1 * [Enum1, Enum2] = []) and (lSet2 * [Enum1, Enum3] = []) then begin
und Ähnliches und das hätte ich gern kürzer/übersichtlicher/eleganter/sprechender. Aber offensichtlich geht das nicht. |
AW: Gibt es keine generischen Proceduren?
Generisch mit Set geht erstmal nicht, da es keinen generischen Constraint dafür gibt. Folglich kann man auch die Operatoren nicht anwenden.
(Vielleicht könnte man mit RTTI und ein paar bösen Hacks und dem Glauben an die Unfehlbarkeit des Entwicklers was hinkriegen, aber das gehört hier nicht hin) Du kannst aber zu einem Set einen Helper schreiben - muss halt wegen obiger Einschränkung für jedes Set separat gemacht werden:
Delphi-Quellcode:
Dein Beispiel würde dann so geschrieben:
type
TMyEnum = (Enum1, Enum2, Enum3, Enum4); TMyEnums = set of TMyEnum; TMyEnumsHelper = record helper for TMyEnums function DoesNotContain(const Value: TMyEnums): Boolean; end; function TMyEnumsHelper.DoesNotContain(const Value: TMyEnums): Boolean; begin Result := (Self * Value) = []; end;
Delphi-Quellcode:
If lSet1.DoesNotContain([Enum1, Enum2]) and lSet2.DoesNotContain([Enum1, Enum3]) then begin
end; |
AW: Gibt es keine generischen Proceduren?
Zitat:
Lösungen für ein spezifisches Set wollte ich ja gerade umgehen. Immerhin weiß ich jetzt, es geht halt nicht, das ist auch etwas wert, danke dafür. |
AW: Gibt es keine generischen Proceduren?
Es gibt aber eine generische Implementierung eines Sets in Spring4D, nämlich ISet<T>. Da gibt es dann z.B. Overlaps als Methode. Das ist aber natürlich langsamer als die native Variante, funktioniert dafür aber auch mit anderen Typen.
|
AW: Gibt es keine generischen Proceduren?
Zitat:
|
AW: Gibt es keine generischen Proceduren?
Zitat:
Habe es mir angesehen, und tatsächlich enthält es so ziemlich das, was ich im Auge hatte. Aber ich glaube, das ganze Framework, das ist mit Kanonen auf Spatzen geschossen. Aber wer weiß ... |
AW: Gibt es keine generischen Proceduren?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz