[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