Is it possible to achieve this dynamically without resorting to type casting? 
It feels like classes should have a builtin type for each class, like 
TClassType, which similar to TObject.ClassType but is a compile time type.

=========

{$mode objfpc}

program test;

type
  TBase = class
    // TClassType should be the type of the current class
    private type TClassType = ...;
    public
      function AndThis: TBase;
  end;

function TBase.AndThis: TBase;
begin
  result := self;
end;

type
  TMyClass = class (TBase)
  end;

var
  c: TMyClass;
begin
  // error: Incompatible types: got "TBase" expected "TMyClass"
  c := TMyClass.Create.AndThis;
  writeln(c.classname);
end.

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to