Delphi 2006 a introduit la surcharge des opérateurs qui a ensuite été en Delphi 2007. sans bogues Ceci est sur Delphi 2007.surcharge Ajouter opérateur pour trois enregistrements étendus
Pourquoi ce qui suit ne compilera pas:
type
TFirstRec = record
// some stuff
end;
type
TSecondRec = record
// some stuff
end;
type
TThirdRec = record
// some stuff
class operator Add(_a: TFirstRec; _b: TSecondRec): TThirdRec;
end;
class operator TThirdRec.Add(_a: TFirstRec; _b: TSecondRec): TThirdRec;
begin
// code to initialize Result from the values of _a and _b
end;
var
a: TFirstRec;
b: TSecondRec;
c: TThirdRec;
begin
// initialize a and b
c := a + b; // <== compile error: "Operator not applicable to this operand type"
end.
Depuis que je suis a déclaré un opérateur qui ajoute deux opérandes a de type TFirstRec et b de type TSecondRec résultant dans un TThirdRec, je m'attendrais à ce que cela compile.
(Si vous avez besoin quelque chose de moins abstrait, pensez à TMyDate, TMyTime et TMyDateTime.)
Hm, oui, cela semble possible. Malheureusement, comme l'a déjà mentionné gabr, il est impossible de déclarer l'opérateur autrement parce qu'il n'y a pas de déclaration directe des enregistrements. Alors, laquelle de ces deux réponses dois-je accepter? Je suppose, le vôtre, parce qu'il a répondu à la question. Merci. – dummzeuch
Ce n'est pas impossible, du moins pas avec les déclarations que vous avez montrées. Il suffit de déclarer 'TThirdRec' * first *, puis de déclarer l'opérateur' Add' dans 'TSecondRec'. –
Rob, c'est un problème si vous voulez que les opérateurs Add couvrent toutes les combinaisons possibles de ces trois enregistrements (ce qui est un problème en soi car il faudrait écrire 3x3x3 = 27 Add opérateurs). – gabr