Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi abfrage ohne if und case (https://www.delphipraxis.net/9165-abfrage-ohne-if-und-case.html)

Illuminator-23-5 19. Sep 2003 13:01


abfrage ohne if und case
 
hi!
ich wollt nur mal kurz fragen: nachdem ich versucht habe, eine 'Abfrage' ohne if und case zu machen, hab ich mir folgendes überlegt:
Delphi-Quellcode:
var
  procs: array[0..1] of pointer;

procedure a;
begin
...
end;

procedure b;
begin
...
end;

procedure Main;
begin
procs[0] := @b;
procs[1] := @a;
...
//Statt folgendem:
  if s=m then
    a
  else
    b;
//Das schreiben:
  procs[ord(s=m)];
end;
Aber beim aufrufen gibts ein problem:
Zitat:

Zitat von Delphi-Compiler
Statement expected, but expression of typr 'Pointer' found

Warum geht das nicht?

Mario 19. Sep 2003 13:45

Re: abfrage ohne if und case
 
Ichh habe jetzt keine Zeit, dass rauszusuchen, aber einen Tipp kann ich Dir schon mal geben.

Einen Pointer kannst Du nie direkt aufrufen. Du musst dazu schon den Typ sagen.

Definiere doch einfach einen Typ:
Delphi-Quellcode:
type TSimpleProc = procedure;
Wenn Du nun TSimpleProc nutzt, solltest Du weiter kommen. Woher soll Delphi denn auch wissen, was der Pointer für eine Funktion oder Procedure ist...

Mario 19. Sep 2003 13:51

Re: abfrage ohne if und case
 
Nun habe ich doch noch nachgeschaut und das wesentlich rauskopiert:
Delphi-Quellcode:
type
  t_GetTabellenWert = FUNCTION (Lastfall: t_Lastfall; LineCount: Integer;
                                VAR Werte: t_ARRAYLastkombination;
                                VAR Einheit: String;
                                VAR VorwertGrafik: String;
                                VAR GrafikFile: String): Boolean;
...
var    GetTabellenWert : t_GetTabellenWert;
begin
...
 CASE Nachweistyp OF
  ntZug_Stahlbruch    : GetTabellenWert := GetWerte_Zug_Stahlbruch;
  ntZug_Betonausbruch : GetTabellenWert := GetWerte_Zug_Betonausbruch;
  ntZug_Herausziehen  : GetTabellenWert := GetWerte_Zug_Herausziehen;
  ntZug_Spalten       : GetTabellenWert := GetWerte_Zug_Spalten;
  ntZug_Druckkraft    : GetTabellenWert := GetWerte_Zug_Druckkraft;
  ntQuer_Stahlbruch   : GetTabellenWert := GetWerte_Quer_Stahlbruch;
  ntQuer_Kantenbruch  : GetTabellenWert := GetWerte_Quer_Kantenbruch;
  ntQuer_Betonausbruch : GetTabellenWert := GetWerte_Quer_Betonausbruch;
  ntQuer_Herausziehen : GetTabellenWert := GetWerte_Quer_Herausziehen;
  ntBiegung           : GetTabellenWert := GetWerte_Biegung;
 END;
...
end;
Ist zwar jetzt mit Case, aber da sollte auch ein Array realisierbar sein. GetWerte_Zug_Stahlbruch, ... sind die Funktionen, die von den Parametern t_GetTabellenWert entsprechen.

Illuminator-23-5 19. Sep 2003 14:03

Re: abfrage ohne if und case
 
ok, super! Danke! klappt!
:dancer2: :dancer2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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