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

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

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

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

Сообщение RedCat » 27.04.2025 00:56:30

Всем Добра!
Пытаюсь переопределить несколько операторов в своей записи, но компилятор ругается
Код: Выделить всё
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;     
RedCat
новенький
 
Сообщения: 10
Зарегистрирован: 17.04.2019 12:15:03

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

Сообщение iskander » 27.04.2025 10:23:30

Имхо должно быть как-то так
Код: Выделить всё
...
{$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;

но не посредине.
iskander
энтузиаст
 
Сообщения: 613
Зарегистрирован: 08.01.2012 18:43:34

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

Сообщение RedCat » 27.04.2025 20:32:06

Понял! Спасибо огромное
RedCat
новенький
 
Сообщения: 10
Зарегистрирован: 17.04.2019 12:15:03


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru
cron