generische Strings

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

ghieber
 
Avatar
 
Subject:

generische Strings

 · 
Posted: 21.02.2015 - 01:25  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: generische Strings

 · 
Posted: 22.02.2015 - 20:42  ·  #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
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   50   64 · Page-Gen-Time: 0.029834s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI