AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

typenloser parameter

Ein Thema von mumu · begonnen am 9. Apr 2005 · letzter Beitrag vom 9. Apr 2005
Antwort Antwort
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#1

typenloser parameter

  Alt 9. Apr 2005, 13:35
ich habe folgende funktion:
Delphi-Quellcode:
function Write(para1: string; para2: string; para3: string; typ: integer; const right_value): boolean;

test: string;
test2: integer;

test := string(right_value);
test2: integer(right_value);
und ich möchte jetzt, dass ich bei right_value entweder einen string oder einen integer übergebe und je nachdem möchte ich dann was bestimmtes machen. ist doch eigentlich total simpel. ich weiß blos nicht, warum das nicht geht.

weiß jemand warum ich da falsche werte rausbekomm? mir wärs eigentlich auch lieber, wenn ich bei right_value nicht erst ne variable deklarieren muss und diese einen wert zuweisen, sondern die funktion z.b. so aufrufen kann:

Write('test', 'test', 'test', 1, 3); gibts da auch ne möglichkeit? wie mach ich das am besten?
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#2

Re: typenloser parameter

  Alt 9. Apr 2005, 14:08
also ich hab jetzt festgestellt, dass es bei mir ganz wo anders hakt.

jetzt mal ne allgemeine frage:
ich will an mein object Fehler im Create eine wert übergeben. dieser wert kann von verschiedenem typ sein. also integer, string, usw...

ich möchte den wert dann in der instanz der klasse speichern und beim aufruf einer funktion wieder ausgeben.

mein problem ist nur, wenn ichs mit pointer mach, dann ist ja der wert nachdem meine lokale variable wieder freigeben wird, weg...

Beispiel:
Delphi-Quellcode:
function FormShow();
var int: integer;
begin
   int := 3;
   fehler := TFehler.Create(@int);
end;

type
  TFehler = class
    public
      constructor Create(ptr: Pointer);
    private
      _value: pointer;
end;

constructor TFehler.Create(value: Pointer);
begin
  _value := value;
end;
ich hoff ihr versteht mich, wie ich das mein.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: typenloser parameter

  Alt 9. Apr 2005, 14:09
Hai mumu,

arbeite doch mit einer überladenen Funktion:
Delphi-Quellcode:
function Write(para1 , para2 , para3: string; typ: integer; right_value : String): boolean; Overload;
begin
  //
end;

function Write(para1 , para2 , para3: string; typ: integer; right_value : Integer): boolean; Overload;
begin
  //
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Write('test', 'test', 'test', 1, 'blubb');
  Write('test', 'test', 'test', 1, 3);
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#4

Re: typenloser parameter

  Alt 9. Apr 2005, 14:14
ja gut, das ist klar, aber mir gehts eher ums prinzip, ob das überhaupt geht

und ich will jetzt nicht 20 überladene funktionen für jeden parameter-typ erstellen. und ich will auch nicht in der klasse 20 lokale variablen mit einem verschiedenen typ anlegen, um den übergabe-wert zu speichern.

gibts da ne möglichkeit?

danke schonmal
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: typenloser parameter

  Alt 9. Apr 2005, 15:02
Moin, Wochenendmoin,

tja - dann kannst Du nur einen Variant nehmen. Nicht unbedingt beleibt bei den Pascalanhängern, aber es ist möglich. Oder Du übergibtst einen Record der aus einem String und einer Floatvariable sowie einer Boolean als Entscheidungsvariable welcher der beiden anderen gerade Gültigkeit hat.

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: typenloser parameter

  Alt 9. Apr 2005, 15:11
oder du übergibst einfach einen Pointer auf den Wert.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#7

Re: typenloser parameter

  Alt 9. Apr 2005, 15:14
variant genau das war das, was ich gesucht hab. warum werden denn variant nicht gern gesehen? welche nachteile haben die?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: typenloser parameter

  Alt 9. Apr 2005, 15:16
variant ist nicht gern gesehen (von mir) weil es den unter d3 noch nicht gibt und auch für dll-proceduren (manchmal muss man ja auch ne funktion exportieren) sind die nicht geeignet wenn man mit anderen programmiersprachen aggiert. deswegen sind da pointer etc. besser.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#9

Re: typenloser parameter

  Alt 9. Apr 2005, 19:48
Moin, mon,

ja ich kann SirThomberry da schon verstehen, sehe das aber etwas lockerer. Prinzipiell sind Variants einfach langsamer als die Ursprungsvariablen und nochmal langsamer als Pointerlösungen.

Das es die nicht unter D3 gibt ist für mich eigentlich nicht mehr relevant, denn meine Programme laufen schon unter D4 nicht mehr sauber durch den Compiler. Borland hat da inzwischen einfach sinnvoller Änderungen gemacht und die möchte ich nicht missen.

Wenn man mit OLE arbeitet kommt man um die Variants, aufgrund der Microsoft-Implementierung, prinzioiell nich umhin. Deshalb hat sie auch Borland eingeführt. Da Pointer in VB nicht vorhanden sind und man oft mit globalen Variablen den Überblick verliert ist der Varianttyp hier willkommen.

In Delphi ist die Weitergabe von Pointern der schnellste Werg um auf Daten zuzugreifen. Aber der Pointer alleine reicht nicht. Man braucht noch eine zweite Variable um die Information zu liefern um was für einen Datentyp es sich handelt. Oft muß man dann wieder mit Case-Strukturen arbeiten um mit dem richtigen Typ dann weiterzuarbeiten, was auch nicht umbedingt elegant ist.

FAZIT: Wenn irgend möglich baue Deine Funktionen so, dass Sie wissen mit was Sie umgehen sollen und vermeide Variant. Wenn es aber einfach in der Problemstellung liegt, dass man nicht weiss um welchen Datentyp es sich handelt den man bearbeiten muß, dann sind Variants vertretbar.

Grüße /// Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:37 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