Bei einer generischen Klasse kann der Compiler den eigentlichen Code erst erzeugen, wenn der tatsächliche Typ von T bekannt ist. Daher gibt es diese Einschränkung.
Alternativ kannst du die
function check_ptr
als Methode der Klasse deklarieren (dann wäre sie ja auch im Interface Part) oder als lokale function innerhalb von
QChar<T>.Create
(wenn sie nicht noch anderswo verwendet wird).
Abgesehen davon sieht man in deinem Code gar nicht, warum er überhaupt generisch ist. Das T wird nirgendwo verwendet - zumindest nicht in dem Teil den du zeigst. Ich bringe das deswegen auf den Tisch, da es manchmal sinnvoller ist, eine nicht generische Basisklasse zu haben und von der dann ein generische Ableitung zu erstellen, die sich rein um den generischen Part kümmert.
Delphi-Quellcode:
type
QChar = class
protected
function getOrigin: uint64;
public
constructor Create; overload;
... // alles was nicht mit T zu tun hat
end;
QChar<T> = class(QChar)
... // alles was mit T zu tun hat
end;
implementation
function check_ptr(name: PChar; ptr: uint64): Boolean;
begin
result := false;
if ptr = 0 then
begin
ErrorMessage(PChar(Format('Error: %s not constructed.',[name])));
exit;
end;
result := true;
end;
constructor QChar.Create;
begin
inherited Create;
if not check_ptr(ClassName, getOrigin) then
begin Free; exit; end;
end;
Übrigens: das
Free innerhalb des
Create ist etwas irritierend.