In Delphi XE2, sto cercando di sovraccaricare l'operatore in
su un record per consentirmi di verificare se il valore rappresentato dal record fa parte di un set. Il mio codice è simile al seguente:Delphi 'in' sovraccarico operatore su un set
type
MyEnum = (value1, value2, value3);
MySet = set of MyEnum;
MyRecord = record
Value: MyEnum;
class operator In(const A: MyRecord; B: MySet): Boolean;
end;
class operator MyRecord.In(const A: MyRecord; B: MySet): Boolean;
begin
Result := A.Value in B;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
R: MyRecord;
S: MySet;
begin
R.Value := value1;
S := [value1, value2];
Button1.Caption := BoolToStr(R in S);
end;
Il codice non viene compilato. Per la dichiarazione R in S
il compilatore dice: tipi incompatibili MyRecord
e MyEnum
.
Come posso sovraccaricare l'operatore In
su MyRecord
in modo che R in S
valuterà al True
nel codice di cui sopra?
Non penso che ciò che stai cercando di ottenere sia possibile ... dovresti avere più fortuna a scrivere i caratteri extra ".Value" => BoolToStr (R.Value in S); e fatelo con questo – ComputerSaysNo
Il codice nella mia domanda è solo un esempio semplificato. Nella mia applicazione effettiva, il tipo di record non ha una corrispondenza uno-a-uno con il tipo impostato. La soluzione che ho finito per usare era aggiungere una 'funzione InSet (S: MySet): Boolean' al record e usarla invece dell'operatore' in'. –
forse abbastanza buono sarebbe rendere la funzione membro invece - 'BoolToStr (R._in (S));' –