Super!
Vielen, vielen Dank. Jetzt hab ich es verstanden.
Hier noch mein vollständiges Beispiel, das jetzt funktioniert (natürlich nur im Anfangsstadium):
Delphi-Quellcode:
unit hs.str2;
interface
type
PhsStr2 = ^ThsStr2;
ThsStr2 =
record
FStr:
string;
function Init(
const mString:
string): PhsStr2;
class operator implicit(
const aValue: ThsStr2):
string;
class operator implicit(
const aValue:
string): ThsStr2;
end;
implementation
uses
System.SysUtils;
{ ThsStr2 }
class operator ThsStr2.implicit(
const aValue: ThsStr2):
string;
begin
Result := aValue.FStr;
end;
class operator ThsStr2.implicit(
const aValue:
string): ThsStr2;
begin
Result.FStr := aValue;
end;
function ThsStr2.Init(
const mString:
string): PhsStr2;
begin
FStr := mString;
Result := @Self;
end;
end.
Und der Aufruf läuft jetzt erfolgreich:
Delphi-Quellcode:
procedure Test;
var
lStr: ThsStr2;
lDummy: string;
begin
lDummy := lStr.Init('dummy');
end;
Genau das, was ich gesucht hatte - und in meinen Augen dann richig schöner Code, denn man kann das Ganze ja beliebig erweitern, etwa
lDummy := lStr.Init('dummy').CopyFromChar('-').CopyToChar('#');
Das möchte ich nämlich gerade machen: All meine String-Funktionen in einen Aufruf, in ein Objekt/einen Record zu packen, ohne globale Proceduren oder besonderes Speichermanagement (zumindest nicht sichtbar).
Jetzt wäre es nur noch schön, wenn man es so aufrufen könnte:
lDummy := lStr('dummy').CopyFromChar('-').CopyToChar('#');
also ohne das Init, aber das geht wohl nicht...
Vielen Dank und viele Grüße
Harald