Перегрузка операторов

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
RedCat
новенький
Сообщения: 10
Зарегистрирован: 17.04.2019 11:15:03

Перегрузка операторов

Сообщение RedCat »

Всем Добра!
Пытаюсь переопределить несколько операторов в своей записи, но компилятор ругается

Код: Выделить всё

 Error: It is not possible to overload this operator. Related overloadable operators (if any) are: 
на переопределение оператора Implicit, хотя вроде в вики https://wiki.freepascal.org/Operator_overloading сказано что его тоже можно переопределять, или я что-то не так понял?
Пример кода переопределения

Код: Выделить всё

 type generic TVector<T> = record
    A: uint64;
    B: uint64;
    C: uint64;
    class operator Initialize(var Dest: specialize TVector<T>);
    class operator Finalize(var Dest: specialize TVector<T>);
    class operator Copy(constref Src: specialize TVector<T>; var Dest: specialize TVector<T>);
    class operator Implicit(const A:TArray<T>): TVector<T>; 
    class operator Implicit(const size: Integer): TVector<T>;
  end;      
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Имхо должно быть как-то так

Код: Выделить всё

...
{$mode objfpc}
...
type
  generic TVector<T> = record
      A: uint64;
      B: uint64;
      C: uint64;
      class operator Initialize(var Dest: specialize TVector<T>);
      class operator Finalize(var Dest: specialize TVector<T>);
      class operator Copy(constref Src: specialize TVector<T>; var Dest: specialize TVector<T>);
      class operator :=(const Ar: specialize TArray<T>): specialize TVector<T>;
      class operator :=(const size: Integer): specialize TVector<T>;
  end;
или так

Код: Выделить всё

...
{$mode delphi}
...
type
  TVector<T> = record
    A: uint64;
    B: uint64;
    C: uint64;
    class operator Initialize(var Dest: TVector<T>);
    class operator Finalize(var Dest: TVector<T>);
    class operator Copy(constref Src: TVector<T>; var Dest: TVector<T>);
    class operator Implicit(const Ar: TArray<T>): TVector<T>;
    class operator Implicit(const size: Integer): TVector<T>;
  end;
но не посредине.
RedCat
новенький
Сообщения: 10
Зарегистрирован: 17.04.2019 11:15:03

Сообщение RedCat »

Понял! Спасибо огромное
Ответить