[fpc-pascal] Assigning a result of a method reference
Joao Morais
post at joaomorais.com.br
Sun Jun 24 00:01:43 CEST 2007
Michael Van Canneyt wrote:
>
> On Sat, 23 Jun 2007, Joao Morais wrote:
>
>> Hello,
>>
>> Taking the following code:
>>
>> {$mode objfpc}{$h+}
>> class function tfoo.classmetadata: string;
>> var
>> vmetadatamethod: function: string of object;
>> begin
>> vmetadatamethod := @internalmetadatastr;
>> // more code
>> Result := vmetadatamethod;
>> end;
>>
>> the last assignment doesn't compile, the compiler complains that:
>>
>> Error: Incompatible types: got "<procedure variable type of
>> function:AnsiString of object;Register>" expected "AnsiString"
>
> Try
>
> Result := vmetadatamethod();
Nice idea, now it works. =) Thanks.
> Strange code you have,
An useful abstraction to ensure that an specific class implements an
specific virtual method. If it doesn't implement, I need an empty string
instead of the inherited value.
> Your code does not even compile under Delphi...
It compiles and works since (at least) D5 and under fpc's $mode delphi.
In this case, the need of the brackets under objfpc can be considered a
bug? Should I file a bug report?
--
Joao Morais
More information about the fpc-pascal
mailing list