[fpc-pascal] Class procedural type

Sven Barth pascaldragon at googlemail.com
Mon Dec 17 20:04:32 CET 2012


On 17.12.2012 17:39, Ewald wrote:
> Hello,
>
> Is there any way to define the appropriate type for `AMethod` (in mode
> ObjFPC)?
>
>      TTestClass = Class
>      Public
>          Class Procedure AMethod;
>      End;
>
> I tried
>      Type TSomeType = Class Procedure;
>
> But this didn't work. Rather obvious of course since this could also be
> interpreted as a class named `Procedure` [I think].
>
> Also I tried
>      Type TSomeType = Class Procedure of Object;
>
> But this didn't get me any further. I read the manual (section 3.6 --
> http://www.freepascal.org/docs-html/ref/refse17.html) and it contains no
> data in respect to this little problem of mine.
>

There is no real solution for this.

> Any ideas?
>
> BTW: For time being I fixed it through
> TProcType(Pointer(@TTestClass.AMethod)), where `TProcType = Procedure;`.
> I think this boiles down to the same as a class procedure is nothing
> more than a normal procedure as I see it (except for the name and some
> other syntax)
>

This is not correct. A class method without static still has a hidden 
parameter through which the class type is passed. If you want to use the 
above you need to declare your method as "static;". In that case a 
method will behave the same as a normal procedure variable, but if you 
want to change e.g. class properties or class variables of the class the 
method belongs to, you must use the class name (e.g. 
TMyClass.MyProperty) to access it.

Regards,
Sven



More information about the fpc-pascal mailing list