![]() |
Delphi-Version: XE
Not enough acutal parameters beim Vergleich von Methodenzeigern
Ich steh grad auf der Leitung:
Ich habe verschiedene Sortierfunktionen, die ich einem Methodenzeiger zuweise und damit dann meine Generic List sortiere. Verschiedene Zuweisung ergibt auch verschiedene Sortierreihenfolgen, soweit sollte alles ok sein. Wenn ich aber abfragen will, auf welche Funktion mein Zeiger zeigt, sagt mir der Compiler: E2035 Not enough actual parameters.:roll:
Code:
function SortByName(const left, right: TTypinfoTreeview):Integer; // Analog dazu SortByNameDesc
begin if left.Modell>right.Modell then Result:=1 else if left.Modell=right.Modell then Result:=0 else Result:=-1; end; TTreeviewService = class(TinterfacedObject, ITypTreeViewInterface) private ... fSortFunction: TComparison<TTypinfoTreeview>; ... end; procedure TTreeviewService.SortByModell; begin if fSortFunction=SortByName then // Hier kommt E2035 not enough actual parameters fSortFunction:=SortbyNameDesc else fSortFunction:=SortbyName; end; |
AW: Not enough acutal parameters beim Vergleich von Methodenzeigern
Wenn du Zeiger vergleichen möchtest, dann vergleiche doch auch ruhig Zeiger. :-D
Delphi-Quellcode:
procedure TTreeviewService.SortByModell;
begin if @fSortFunction = @SortByName then // läuft! fSortFunction := SortbyNameDesc else fSortFunction := SortByName; end; |
AW: Not enough acutal parameters beim Vergleich von Methodenzeigern
Es kompiliert, aber das ist sicher nicht was er will. Das vergleicht doch nur die Adressen einer Variable mit der Adresse einer Routine im Code-Bereich deiner Anwendung.
Hast du das mal ausprobiert? Es müsste doch dann "Es sind die gleichen" ausgegeben werden, oder?
Delphi-Quellcode:
program Project5;
{$APPTYPE CONSOLE} {$R *.res} uses System.Generics.Defaults; function someComparison(const left, right: Integer): Integer; begin Result := 42; end; var myComparison: TComparison<Integer>; begin myComparison := someComparison; if (@myComparison = @someComparison) then WriteLn('Es sind die gleichen'); end. |
AW: Not enough acutal parameters beim Vergleich von Methodenzeigern
Es kompiliert, mehr war doch nicht gefordert, oder? :twisted:
...ich gehe jetzt in die dunkle Ecke und schäme mich... :| |
AW: Not enough acutal parameters beim Vergleich von Methodenzeigern
Das wird so nicht funktionieren. Außerdem nehme ich an, dass TComparison<TTypinfoTreeview>; aus Generics.Defaults stammt und somit kein Methodenzeiger ist sondern eine anonyme Methode. Und die kann man sowieso nicht so einfach auf den Pointer einer Funktion überprüfen, da sie niemalsnich gleich sein werden.
Wenn du zwischen auf- und absteigender Sortierung wechseln willst, dann würd ich vorschlagen, das Ergebnis der Compare Methode mit 1/-1 zu multiplizieren und schon hast du den Wechsel. |
AW: Not enough acutal parameters beim Vergleich von Methodenzeigern
Zitat:
Zitat:
Eine nicht so elegante Lösung, die mir hier einfallen würde, wäre dann eine zusätzliche Variable, die die Sortierreihenfolge enthält. Oder wie kann ich den Vergleich sonst vielleicht machen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz