Перегрузка оператора in Delphi в наборе

В Delphi 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 в S компилятор говорит: Несовместимые типы MyRecord и MyEnum .

Как я могу перегрузить оператор In в MyRecord , чтобы R в S оценил как True в приведенном выше коде?

11
задан Jan Goyvaerts 8 November 2011 в 03:33
поделиться