J'utilise l'opérateur surcharge pour les enregistrements en Delphi 2006. (S'il vous plaît ne pas répondre à cette question en me disant de ne pas.)Comment définir des opérateurs de conversion implicites pour des enregistrements mutuellement dépendants?
J'ai deux types d'enregistrements avec l'opérateur implicite surchargé. Ils sont tous les deux seulement dans la mise en œuvre du module, non exposés à travers l'interface.
Mon problème est, maintenant qu'ils sont mutuellement dépendants, je ne sais pas comment transmettre le second type au compilateur. Je sais comment faire cela avec des fonctions, des procédures et des classes, mais pas avec des enregistrements.
Voici un exemple simplifié de ce que je suis en train de faire:
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;
Si chaque type peut implicitement se convertir à l'autre type, vous pourriez vouloir reconsidérer si vous avez vraiment besoin de deux types distincts . –
@Rob: C'est tout à fait possible. J'ai récemment rencontré cette même situation lorsque j'avais deux types de vecteurs différents, l'un constitué d'entiers et l'autre de flotteurs. Vous avez besoin des deux types pour des choses différentes, mais vous voulez que les deux soient mutuellement compatibles. La solution était essentiellement celle que vous avez publiée. –
Les types ne sont nulle part aussi simples. L'un porte des statistiques sommaires sur l'autre. Ils sont utilisés pour regrouper logiquement les données qui sont transmises ailleurs. [reposted pour essayer de se débarrasser de l'espace blanc en excès.] –