generische Strings

myprog(var: string) - zuweisungskompatibel zu string jeder Länge?

ghieber
 
Avatar
 
Betreff:

generische Strings

 · 
Gepostet: 21.02.2015 - 01:25 Uhr  ·  #1
Folgendes Problem:

Ich möchte eine Prozedur schreiben, die Strings beliebiger Länge als var - Parameter akzeptiert - ähnlich wie viele Library - Routinen dies tun. In den meisten Pascal - Dialekten gibt es dafür den generischen Typ string (ohne Längenangabe).

Code

function pushchar (var s: string; c:char;  maxlen: byte):boolean;
begin
  if length(s) >= maxlen then return (false);
  s := s+c;
  return( true);
end;


geht nicht, der Compiler beschwert sich über die fehlende Längenangabe. Gebe ich eine an, z.B. [127], gibts Fehlermeldung, sobald ich einen kürzer deklarierten String im Funktionsaufruf einsetze.

Der Workaround
Code

function pushchar (p: pointer to string; c:char;  maxlen: byte):boolean;
begin
  if length(p^) >= maxlen then return (false);
  p^ := p^+c;
  return( true);
end;

und dann mit @mystring aufrufen passiert den Compiler anstandslos - aber genau weil ich solche Sachen nicht mag, verwende ich Pascal.

Frage: hab ich was übersehen, und gibt es einen Weg, meine Funktion aus dem ersten Beispiel richtig zu deklarieren?

Wenn nein, wäre meine Anregung einen solchen generischen Stringtyp einzuführen,. Wenn das nicht geht wg. Probleme der Speicherzuweisung wäre ein gangbarer Weg, Zuweisungen zwischen Strings unterschiedlicher Länge zu erlauben (evtl nach Compilerschalter Rangecheck off).

Ein generischer Stringtyp könnte auch beschränkt sein auf genau meinen Fall, Referenz - Parameter in Prozeduren.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: generische Strings

 · 
Gepostet: 22.02.2015 - 20:42 Uhr  ·  #2
Hallo ghieber,

ein solches Verhalten wäre sicher sehr wünschenswert, aber das bedingt einen
radikalen Umbau des Compilers. Es gibt eine Unzahl von Stellen im System wo die
Strings abgeprüft werden. Sorry, z.Zt. nicht machbar.

rolf
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 8 · Cache Hits: 14   51   65 · Page-Gen-Time: 0.013481s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI