Przeładowywanie operatorów.

Przeładowywanie operatorów.
spartanPAGE
  • Rejestracja:około 12 lat
  • Ostatnio:11 minut
0

Potrzebuję użyć przeładowywania operatorów (na potrzeby zniesienia musu grupowania atrybutów i węzłów w http://4programmers.net/Forum/Spolecznosc/Projekty/273661-treestructinfodsl_-_domain_specific_language_dla_tsi_w_object_pascalu?view=unread)

Z tego co widzę, wraz z http://wiki.freepascal.org/FPC_New_Features_2.6.0#Advanced_record_syntax powinienem móc używać tego, co przy rekordach oferuje delphi (artykuł wskazany przez wiki: http://docwiki.embarcadero.com/RADStudio/Berlin/en/Operator_Overloading_(Delphi))

Kopiuj
program ideone;
{$mode objfpc}{$H+}    

type TRecord = record
	class operator Implicit(Foo: Integer): TRecord;
end;


class operator TRecord.Implicit(Foo: Integer): TRecord;
begin
  //...
end;

begin
end.

http://ideone.com/gAGsKk

Niestety, nawet najprostsza próba odrzucana jest przez Fatal: Syntax error, "identifier" expected but "CLASS" found.
Jak poprawnie przeładowywać operatory?

edytowany 1x, ostatnio: spartanPAGE
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 8 godzin
3

Używasz {$mode objfpc}, a w tym trybie Free Pascal ma własną składnię definiowania operatorów.
http://www.freepascal.org/docs-html/ref/refch15.html#x207-22900015

(uprzedzając pytania "a dlaczego jest inaczej" odpowiadam, że FPC było pierwsze, to ludzie od Delphi się nie dostosowali)

Zobacz pozostałe 13 komentarzy
Azarien
@furious programming: to zupełnie inny dialekt - no a ja twierdzę, że to nie powinien być "zupełnie inny dialekt". ty stwierdzasz stan istniejący, ja mówię jak (uważam że) powinno być.
vpiotr
Ja tam się cieszę, że autorzy FPC mają większe ambicje niż tylko kompatybilność z Delphi.
flowCRANE
@Azarien - dlaczego Free Pascal nie powinien być innym dialektem? Ja się cieszę, że nim jest i pozwala na takie zabiegi, których Delphi do dziś nie wspiera, choć według mnie powinno; Pytanie teraz, jeżeli pomiędzy tymi dialektami była pełna zgodność, to czego ona dotyczyła i kiedy została zerwana?
Azarien
@furious programming @vpiotr: ależ ja się cieszę, że FPC ma większe ambicje. ale nie cieszę się wcale, że tam gdzie FPC było pierwsze, Delphi wymyśla po swojemu.
flowCRANE
@Azarien - po prostu brak porozumienia;
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Tuchów
  • Postów:12175
0

Tak na marginesie - przeładowywanie operatorów dla rekordów z użyciem słowa Class to WTF - co ma piernik do wiatraka? Delphi w tym przypadku ma niestety taki kwiatek w składni; Składnia przeładowywania operatorów dla Free Pascala na szczęście wygląda normalnie, raz że nie używa się keywordów dla klas, a dwa - podaje się po prostu operator, zamiast jego nazwy.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
Zobacz pozostałe 9 komentarzy
flowCRANE
@kAzek - tylko że to już nie są rekordy, są bardziej jak stare obiekty z częścią funkcjonalności klas (czyli właśnie zaawansowane rekordy); A jeśli faktycznie tak jest to nie można zdefiniować własnego operatora dla rekordów prostych, co jest możliwe we Free Pascalu, ze względu na składnię i umiejscowienie kodu przeładowywania operatorów;
Azarien
@kAzek: skoro jest object to nie było sensu rozszerzać składni rekordów.
KA
@Azarien http://docwiki.embarcadero.com/RADStudio/Berlin/en/Structured_Types jak widać nadal jest w typach strukturalnych a pod przykładem w sekcji Records (advanced) wypisane są różnice miedzy rekordem a klasą.
flowCRANE
Ja nie używam zaawansowanych rekordów - zaciemnia to kod; Mamy zwykłe rekordy, mamy obiekty i mamy też klasy - cóż więcej potrzeba; A zaawansowane rekordy zostały wprowadzone zapewne po to, aby odróżnić składniowo zwykłe struktury danych (alokowane zwykle na stosie) od instancji klas, które nazywane są popularnie obiektami; Była kicha, bo jedne to obiekty (stare) i drugie też (instancje klas), stąd pewnie istnienie rekordów z metodami;
Azarien
@kAzek: ja wiem jaka jest różnica między object, class i record. wprowadzenie „zaawansowanych rekordów” było niepotrzebne, skoro są „stare” obiekty (object), do których wystarczyło dodać operatory.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.