在德爾福XE2,我試圖超載在記錄in
運算符,讓我檢查記錄表示的值是否是一個集合的一部分。我的代碼如下所示:德爾福'在'操作員過載集
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;
代碼無法編譯。對於語句R in S
,編譯器說:不兼容的類型MyRecord
和MyEnum
。
如何在MyRecord
上重載In
運算符,以便R in S
在上面的代碼中將計算爲True
?
我不認爲你想要達到的是可能的......你應該有更好的運氣寫一個額外的字符「.Value」=> BoolToStr(R.Value in S);並完成它 – ComputerSaysNo
我的問題中的代碼只是一個簡化的示例。在我的實際應用中,記錄類型與集合類型沒有一對一的對應關係。我最終使用的解決方法是向記錄添加一個'函數InSet(S:MySet):Boolean',並使用它來代替'in'運算符。 –
也許已經足夠讓會員功能,而不是 - BoolToStr(R._in(S));' –