Ich bin mit dem Operator für Aufzeichnungen in Delphi Überlastung 2006. (Bitte verwenden Sie diese Frage nicht beantworten, indem sie mir nicht zu erzählen.)Wie definiere ich implizite Konvertierungsoperatoren für gegenseitig abhängige Datensätze?
Ich habe zwei Satztypen mit dem impliziten Betreiber überlastet. Sie sind beide nur in der Implementierung des Moduls, nicht durch die Schnittstelle ausgesetzt.
Mein Problem ist, jetzt, da sie sich gegenseitig bedingen, ich weiß nicht, wie man den zweiten Typ an den Compiler weiterleiten. Ich weiß, wie man das mit Funktionen, Prozeduren und Klassen macht, aber nicht mit Datensätzen.
Hier ist ein vereinfachtes Beispiel von dem, was ich zu tun versucht:
implementation
type
TMyRec1 = record
Field1 : Integer;
class operator Implicit(a: TMyRec2): TMyRec1; // <---- Undeclared Identifier here.
end;
TMyRec2 = record
Field2: Integer;
class operator Implicit(a: TMyRec1): TMyRec2;
end;
class operator TMyRec1.Implicit(a:TMyRec2): TMyRec1;
begin
Result.Field1 := a.Field2;
end;
class operator TMyRec2.Implicit(a:TMyRec2): TMyRec2;
begin
Result.Field2 := a.Field1;
end;
Wenn jeder Art implizit selbst auf die andere Art umwandeln können, möchten Sie vielleicht zu überdenken, ob Sie wirklich brauchen zwei getrennte Arten . –
@Rob: Es ist durchaus möglich. Ich bin kürzlich in dieselbe Situation geraten, als ich zwei verschiedene Vektor-Typen hatte, einen aus Integern und einen aus Floats. Sie benötigen beide Typen für verschiedene Dinge, aber Sie möchten, dass die beiden für beide Zuordnungen kompatibel sind. Die Lösung war im Grunde die, die du gepostet hast. –
Die Arten sind nirgends so einfach. Einer trägt zusammenfassende Statistiken über den anderen. Sie werden verwendet, um Daten logisch zu gruppieren, die an anderer Stelle weitergegeben werden. [zurückgeschickt, um überschüssigen Leerraum loszuwerden.] –