En Delphi XE2, intento sobrecargar el operador in
en un registro para permitirme verificar si el valor representado por el registro es parte de un conjunto. Mi código se ve así:Sobrecarga del operador Delphi 'in' en un conjunto
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;
El código no se puede compilar. Para la instrucción R in S
el compilador dice: Tipos incompatibles MyRecord
y MyEnum
.
Como puedo sobrecargar el operador In
en MyRecord
modo que R in S
evaluará a True
en el código anterior?
No creo que lo que intentas lograr sea posible ... deberías tener mejor suerte escribiendo los caracteres adicionales ".Value" => BoolToStr (R.Value en S); y termine con eso – ComputerSaysNo
El código en mi pregunta es solo una muestra simplificada. En mi aplicación actual, el tipo de registro no tiene una correspondencia uno-a-uno con el tipo de conjunto. La solución que terminé usando fue agregar una función 'InSet (S: MySet): Boolean' al registro y usar eso en lugar del operador' in'. –
quizás sea lo suficientemente bueno como para hacer que el miembro funcione en su lugar - 'BoolToStr (R._in (S));' –