AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Not enough acutal parameters beim Vergleich von Methodenzeigern

Not enough acutal parameters beim Vergleich von Methodenzeigern

Ein Thema von Rainer Wolff · begonnen am 16. Nov 2015 · letzter Beitrag vom 16. Nov 2015
Antwort Antwort
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#1

Not enough acutal parameters beim Vergleich von Methodenzeigern

  Alt 16. Nov 2015, 16:33
Delphi-Version: XE
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.

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;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Not enough acutal parameters beim Vergleich von Methodenzeigern

  Alt 16. Nov 2015, 17:21
Wenn du Zeiger vergleichen möchtest, dann vergleiche doch auch ruhig Zeiger.

Delphi-Quellcode:
procedure TTreeviewService.SortByModell;
begin
  if @fSortFunction = @SortByName then // läuft!
    fSortFunction := SortbyNameDesc
  else
    fSortFunction := SortByName;
end;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Not enough acutal parameters beim Vergleich von Methodenzeigern

  Alt 16. Nov 2015, 17:42
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Not enough acutal parameters beim Vergleich von Methodenzeigern

  Alt 16. Nov 2015, 18:15
Es kompiliert, mehr war doch nicht gefordert, oder?

...ich gehe jetzt in die dunkle Ecke und schäme mich...
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Not enough acutal parameters beim Vergleich von Methodenzeigern

  Alt 16. Nov 2015, 18:34
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Not enough acutal parameters beim Vergleich von Methodenzeigern

  Alt 16. Nov 2015, 18:53
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.
Richtig, TComparison kommt aus Generics.Defaults.
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.
Leider will ich nicht nur auf- und absteigend, sondern auch nach verschiedenen Feldern sortieren.

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?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz